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'