我有一个字符串:
['A', 'B']
我需要删除所有,
,[
和]
个字符。最终结果应该是
'A' 'B'
下面列出了我尝试过的所有内容以及结果
我试过的命令
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']
显然,它们都没有奏效。但是,这些命令确实:
user@vm:~$ echo "['A', 'B']" | sed -r 's/[],[]//g'
'A' 'B'
user@vm:~$ echo "['A', 'B']" | sed -r 's/[][,]//g'
'A' 'B'
为什么这样做?上下命令之间的差异:
[
,]
未转义为什么订单很重要?
答案 0 :(得分:4)
来自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'