sed remoção de espaço em branco

sed remoção de espaço em branco

Acho que sedmuitas vezes não consegue corresponder ao padrão dos espaços em branco. Considere os seguintes exemplos:

echo 'A     B     C' | sed 's/[ \t]*//g'
ABC

echo -e 'A\tB\tC' | sed 's/[ \t]*//g'
A       B       C

perl -e 'print "A     B     C\n"' | sed 's/[ \t]*//g'
ABC

perl -e 'print "A\tB\tC\n"' | sed 's/[ \t]*//g'
A       B       C

Alguém poderia explicar por que sedàs vezes não consegue corresponder aos espaços em branco?

Responder1

1.

echo -e 'A\tB\tC' | sed 's/[ \t]*//g'
A       B       C

Funciona para mim

$ echo -e 'A\tB\tC' | sed 's/[ \t]*//g'
ABC

Experimente isso

$ echo -e 'a\tb' | sed -e 's/[ \t]//'
ab

2.

perl -e 'print "A     B     C\n"' | sed 's/^[ \t]*//g'
A       B       C

sua string não contém um espaço no início ( ^) da linha

Responder2

Algumas versões de sednão suportam \te outras escapam no lado esquerdo de um comando de substituição.

Você pode encontrar informações sobre variações entre versões sednoPerguntas frequentes.

Responder3

A segunda afirmação que você tem acima funciona na minha máquina (Ubuntu 10.10 amd64, sed versão 4.2.1, pacote sed versão 4.2.1-7) e eu realmente não tenho uma explicação de por que essa não funcionaria.

A terceira e a quarta são porque você está usando a âncora de início de linha (^), então seriaapenasretire o espaço em branco inicial e no texto de entrada, você não terá nenhum espaço em branco no início das linhas.

Responder4

Você deveria usar\spara corresponder ao espaço em branco e à tabulação:

echo 'A     B     C' | sed 's/\s//g'
ABC

echo -e 'A\tB\tC' | sed 's/\s//g'
ABC

perl -e 'print "A     B     C\n"' | sed 's/\s//g'
ABC

perl -e 'print "A\tB\tC\n"' | sed 's/\s//g'
ABC

informação relacionada