我试图在 sed 的字符集中匹配 或 ,但由于某种原因它不[
喜欢]
]
$ echo 'foo [bar]' | sed -E 's/[\[\]]//g'
foo [bar]
以下作品:
$ echo 'foo [bar]' | sed -E 's/\]//g'
foo [bar
$ echo 'foo [bar]' | sed -E 's/[\[]//g'
foo bar]
但由于某种原因,]
该字符集的内部打破了它:
$ echo 'foo [bar]' | sed -E 's/[\]]//g'
foo [bar]
奇怪的是,这甚至有效:
$ echo 'foo [bar]' | sed -E 's/[]]//g'
foo [bar
$ echo 'foo [bar]' | sed -E 's/[[]//g'
foo bar]
但不是这个:
$ echo 'foo [bar]' | sed -E 's/[[]]//g'
foo [bar]
我是否只需要某种额外的转义或者这甚至可能吗?
答案1
]
括号表达式内的 or不需要[
转义。尽管括号表达式中的反斜杠失去了转义含义,并且它与字面反斜杠字符匹配。因此,当您这样做时[\]]
,您会告诉sed
匹配两个字符:\
第一[\]
部分的 ,紧随其后的是]
;但\]
输入中的字符串没有匹配,因此没有发生任何更改。要匹配某个字符,仅当您喜欢在括号表达式中使用它]
时才需要,否则也可以使用文字。[]]
]
另请注意,在方括号表达式中[...]
,字符]
必须是第一个字符,因此's/[[]]//g'
您应该这样做's/[][]//g'
。