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