
Entrada
[*] 111, 22, 33, 44
Saída
111,22,33,44
Usando sed
o comando sed 's/^\[\*\][[:space:]]*//' file
, conseguimos exibir a saída, o 111, 22, 33, 44
que significa que ainda há espaço.
Então, qual é o sed
comando 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 g
comandopara 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 sed
comando, por exemplo:
echo '[*] 111, 22, 33, 44' \
| sed 's/^\[\*\]//' \
| sed 's/[[:space:]]//g'