Estou tentando combinar um [
ou ]
em um conjunto de caracteres no sed, mas por algum motivo não gosta]
$ echo 'foo [bar]' | sed -E 's/[\[\]]//g'
foo [bar]
As seguintes obras:
$ echo 'foo [bar]' | sed -E 's/\]//g'
foo [bar
$ echo 'foo [bar]' | sed -E 's/[\[]//g'
foo bar]
Mas, por algum motivo, um ]
interior desse conjunto de caracteres o quebra:
$ echo 'foo [bar]' | sed -E 's/[\]]//g'
foo [bar]
Estranhamente, até isso funciona:
$ echo 'foo [bar]' | sed -E 's/[]]//g'
foo [bar
$ echo 'foo [bar]' | sed -E 's/[[]//g'
foo bar]
Mas não isso:
$ echo 'foo [bar]' | sed -E 's/[[]]//g'
foo [bar]
Eu só preciso de algum tipo de escape extra ou isso é possível?
O
]
ou[
não precisa ser escapado dentro da expressão de colchetes. Embora a barra invertida dentro da expressão entre colchetes perca seu significado de escape e corresponda ao caractere literal de barra invertida. Então, quando você faz[\]]
, você dizsed
para combinar dois caracteres: o\
pela primeira[\]
parte imediatamente seguido por]
; mas não há correspondência para a\]
string em sua entrada, portanto, nenhuma alteração ocorre. Para corresponder a um]
caractere, você só precisa[]]
se preferir usá-lo dentro da expressão de colchetes, caso contrário, o literal]
também pode ser usado.Além disso, observe que dentro da expressão de colchetes
[...]
, o caractere]
deve ser o primeiro caractere, então para isso's/[[]]//g'
você deve fazer's/[][]//g'
.