我有一个字符串:
['A', 'B']
Run Code Online (Sandbox Code Playgroud)
我需要删除所有,,[和]字符。最终结果应该是
'A' 'B'
Run Code Online (Sandbox Code Playgroud)
以下是我尝试过的所有内容以及结果的列表
我尝试过的命令
user@vm:~$ echo "['A', 'B']" | sed -r 's/[\[\],]//g'
['A', 'B']
user@vm:~$ echo "['A', 'B']" | sed -r 's/[[],]//g' # unescaped
['A', 'B']
user@vm:~$ echo "['A', 'B']" | sed -r 's/[\[\]]//g' # removed ","
['A', 'B']
user@vm:~$ echo "['A', 'B']" | sed -r 's/[,]//g' #removed "[" and "]"
['A' 'B']
user@vm:~$ echo "['A', 'B']" | sed -r 's/[[,]//g' # removed "]"
'A' 'B']
Run Code Online (Sandbox Code Playgroud)
显然,它们都不起作用。但是,这些命令可以:
user@vm:~$ echo "['A', 'B']" | sed -r 's/[],[]//g'
'A' 'B'
user@vm:~$ echo "['A', 'B']" | sed -r 's/[][,]//g'
'A' 'B'
Run Code Online (Sandbox Code Playgroud)
为什么要这样做?上下命令之间的区别:
[,]都没有逃脱为什么顺序很重要?
从info sed(另请参见https://www.gnu.org/software/sed/manual/sed.html#Character-Classes-and-Bracket-Expressions)
前导“ ^”颠倒了LIST的含义,因此它与LIST中没有的任何单个字符匹配。要在列表中包括“]”,请使其成为第一个字符(如果需要,请在“ ^”之后);在列表中包括“-”,应使其成为第一个或最后一个字符;在第一个字符后加上“ ^”。
而且如评论中所述,tr更适合
$ echo "['A', 'B']" | tr -d '[],'
'A' 'B'
Run Code Online (Sandbox Code Playgroud)