pt remoção do espaço em branco

1

Descobri que sed geralmente falha ao combinar os 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 corresponde ao espaço em branco?

    
por user001 21.01.2012 / 00:41

4 respostas

3

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

Tente 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

    
por 21.01.2012 / 01:18
1

Algumas versões de sed não suportam \t e algumas outras fugas no lado esquerdo de um comando de substituição.

Você pode encontrar informações sobre variações entre as versões de sed na FAQ .

    
por 21.01.2012 / 18:39
0

A segunda declaração que você tem acima funciona na minha máquina (Ubuntu 10.10 amd64, sed ver 4.2.1, versão do pacote sed 4.2.1-7) e eu realmente não tenho uma explicação sobre o porquê disso não trabalho.

O terceiro e o quarto são porque você está usando a âncora de início de linha (^), então seria somente tira o espaço em branco inicial e, em seu texto de entrada, você não tem nenhum espaços em branco no início das linhas.

    
por 21.01.2012 / 01:17
0

Você deve usar \ s para corresponder ao espaço em branco e à guia:

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
    
por 21.06.2012 / 12:53