我正在尝试匹配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]
我是否只需要某种额外的转义,或者这甚至可能吗?
]
or[
不需要在括号表达式中转义。尽管括号表达式中的反斜杠失去了转义含义,并且它匹配文字反斜杠字符。因此,当您这样做时[\]]
,您会告诉sed
匹配两个字符:\
第一[\]
部分紧跟]
; 但输入中的字符串没有匹配\]
,因此不会发生任何变化。要匹配一个]
字符,您只需要[]]
在您更喜欢在括号表达式中使用它时才需要,否则]
也可以使用文字。另外,请注意在括号表达式
[...]
中,字符]
必须是第一个字符,因此's/[[]]//g'
您应该这样做's/[][]//g'
。