Grep falha ao localizar a sequência após atribuir à variável

1

Eu corro:

awk -F ',' '{print $2}' data.dat | sort | uniq |  tr '\n' ',' | grep "*)>nS4XkrlH  @XUL"

e a sequência está localizada nos resultados.

Então eu corro

b='awk -F ',' '{print $2}' data.dat | sort | uniq |  tr '\n' ',''
echo $b | grep "*)>nS4XkrlH  @XUL"

mas nenhum resultado é retornado.

Alguém tem alguma ideia de por que isso acontece?

Obrigado por qualquer ajuda.

    
por dr.doom 14.12.2014 / 04:15

1 resposta

0

A diferença de chave entre essas duas seqüências de comando é que a segunda contém echo $b , que executa a divisão da palavra shell . Para fazer com que a segunda sequência de comandos seja a mesma que a primeira, substitua:

echo $b | grep "*)>nS4XkrlH  @XUL"

com:

echo "$b" | grep "*)>nS4XkrlH  @XUL"

Divisão de palavras

Observe como os espaços são tratados nessas duas declarações echo :

$ b="a   b c"
$ echo "$b"
a   b c
$ echo $b
a b c

Sem as aspas duplas, o shell executa a divisão de palavras nos argumentos para echo . Isso significa que todos os espaços em branco consecutivos são condensados em um único espaço. Com aspas duplas, a divisão de palavras é suprimida e o espaço em branco é preservado.

Divisão de palavras e um padrão grep com vários espaços

Seu padrão grep contém dois espaços consecutivos. A menos que o argumento para echo esteja entre aspas duplas, a saída de echo não terá esses dois espaços e nenhuma correspondência será encontrada. Observe:

$ b="*)>nS4XkrlH  @XUL"
$ echo $b | grep "*)>nS4XkrlH  @XUL"
$ echo "$b" | grep "*)>nS4XkrlH  @XUL"
*)>nS4XkrlH  @XUL

O primeiro grep não corresponde a nada, exceto o segundo. A diferença é a divisão de palavras do shell.

    
por 14.12.2014 / 04:34