sed remove caracteres especiais e espaços na linha

sed remove caracteres especiais e espaços na linha

Entrada

[*] 111, 22, 33, 44

Saída

111,22,33,44

Usando sedo comando sed 's/^\[\*\][[:space:]]*//' file, conseguimos exibir a saída, o 111, 22, 33, 44que significa que ainda há espaço.

Então, qual é o sedcomando correto?

Responder1

A resposta curta é que isso deve fazer o que você deseja:

sed 's/[][*]\|[[:space:]]//g'

Teste assim:

echo '[*] 111, 22, 33, 44' | sed 's/[][*]\|[[:space:]]//g'

Saída:

111,22,33,44

Segue uma explicação mais longa.


O ingrediente chave que faltava em sua expressão era o uso deo gcomandopara realizar a substituição global. Sem este comando, apenas a primeira correspondência de cada linha será substituída.

A parte mais contra-intuitiva (na minha opinião) da minha solução é como incluir colchetes dentro de uma classe de caractere. Para isso, referimo-nos aomanual do sed:

‘]’
    ends the bracket expression if it’s not the first list item.
    So, if you want to make the ‘]’ character a list item, you must put it first.

Para uma discussão mais aprofundada sobre esse tópico, consulte a seguinte postagem no SeverFault:

Alternativamente, você poderia ter pegado sua expressão e canalizado para outro sedcomando, por exemplo:

echo '[*] 111, 22, 33, 44' \
| sed 's/^\[\*\]//' \
| sed 's/[[:space:]]//g'

informação relacionada