Por que não consigo escapar das chaves “]” no sed?

6

Pergunta : Por que não posso escapar do "]"?

$ printf "*#$@~\!&*()[]\n"
*#~\!&*()[]
$ printf "*#$@~\!&*()[]\n" | sed 's/[*#$@~!&*()\[\]]//g'
*#~\!&*()
$
    
por LoukiosValentine79 15.05.2015 / 10:29

1 resposta

8

Dentro de [...] , a barra invertida não é especial. [\[] corresponde à barra invertida e [ 1 .

Se você quiser incluir o caractere ] no conjunto, verifique se ele é o primeiro: []X] corresponde a ] ou X , enquanto [X]] corresponde a X seguido de ] (e [X\]] corresponderia a X ou \ seguido de ] ). Para excluí-lo, ele precisa estar logo após ^ : [^]X] ser qualquer caractere, mas ] ou X .

Então, no seu exemplo:

sed 's/[]*\#$@~!&*()[]//g'

1 Há algumas exceções para isso com o GNU sed quando o modo de conformidade POSIX não foi ativado (via $POSIXLY_CORRECT ou --posix ) e é por isso que, para compatibilidade com essa implementação, quando você precisar da barra invertida para ser incluída no conjunto, é melhor escrevê-la como [\] .

    
por 15.05.2015 / 10:34