问题: 为什么我无法逃脱“]”?
$ printf "*#$@~\!&*()[]\n"
*#~\!&*()[]
$ printf "*#$@~\!&*()[]\n" | sed 's/[*#$@~!&*()\[\]]//g'
*#~\!&*()
$
答案1
在里面[...]
,反斜杠并不特殊。[\[]
匹配反斜杠和[
1。
如果您想]
在集合中包含该字符,则必须确保它是第一个:[]X]
matches]
或X
while[X]]
将匹配X
后跟]
(并且[X\]]
将匹配X
或\
后跟]
)。要排除它,它必须位于^
:后面,是除或 之外的[^]X]
任何字符。]
X
所以,在你的例子中:
sed 's/[]*\#$@~!&*()[]//g'
1sed
当 POSIX 一致性模式尚未启用(通过$POSIXLY_CORRECT
或)时,GNU 有一些例外,--posix
这就是为什么,为了与该实现兼容,当您确实需要将反斜杠包含在集合中时,最好将其编写为[\\]
。