pt_br remova caracteres especiais e espaços na linha

4

Entrada

[*] 111, 22, 33, 44

Resultado

111,22,33,44

Usar sed command sed 's/^\[\*\][[:space:]]*//' file foi capaz de exibir a saída como 111, 22, 33, 44 , o que significa que o espaço ainda está lá.

Então, qual é o comando sed correto?

    
por αԋɱҽԃ αмєяιcαη 21.11.2017 / 13:53

1 resposta

6

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

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

Teste assim:

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

Saída:

111,22,33,44

Uma explicação mais longa segue.

O ingrediente-chave que sua expressão estava faltando foi o uso de g comando para realizar a substituição global. Sem esse comando, apenas a primeira correspondência em cada linha será substituída.

A parte mais contraintuitiva (na minha opinião) da minha solução é como incluir os colchetes dentro de uma classe de caractere. Para isso, nos referimos ao manual de segurança :

‘]’
    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 sobre SeverFault:

Como alternativa, você poderia ter usado sua expressão e canalizado para outro comando sed , por exemplo:

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