Bash 在正则表达式中的字符类内使用括号
我有一个字符串:Bash 在正则表达式中的字符类内使用括号,bash,sed,Bash,Sed,我有一个字符串: ['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']
['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'
为什么会这样?上面和下面命令之间的区别:
- 未转义
,[
]
- 顺序不同(]在[]之前)
为什么订单很重要?来自
info sed
(另请参阅)
前导“^”反转列表的含义,使其与任何
列表中没有单个字符。若要在列表中包含']',请使
它包含第一个字符(如果需要,在“^”之后),以包括“-”
在列表中,将其列为第一个或最后一个;包括“^”并将其放入
在第一个字符之后
正如评论中提到的,tr
更适合
$ echo "['A', 'B']" | tr -d '[],'
'A' 'B'
检查
man sed
或info sed
(gnu sed)。。。可能会提到。。。例如:见若要将“]”字符作为列表项,必须将其放在第一位
在BRE或扩展正则表达式的字符类中,必须将未转义的]
放在第一位。完全跳过sed
,改用tr
。sed-r's/[\x5d\x5b]//g'