Text-Processing
為什麼我不能將 ] 與 sed 匹配
我正在嘗試匹配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'
。