Text-Processing

為什麼我不能將 ] 與 sed 匹配

  • April 9, 2022

我正在嘗試匹配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'

引用自:https://unix.stackexchange.com/questions/698384