Cadeia de caracteres de concatual com variável após um 'grep'

1

Aqui está a estrutura do meu arquivo:

g-4.n.g.fr 10.147.243.63 g-4.n.g.fr-w1

Aqui está o meu script:

 #! /bin/sh
 ip=10.147.243.63
 worker=$(grep -e $ip $1 | awk '{ print $3; }')
 echo "[Hostname: ]"
 echo $worker
 echo "[Before concat]"
 echo $worker
 echo "[After concat]"
 echo "$worker.v.1"

Eu tenho esta saída:

[Hostname: ]
g-4.n.g.fr-w1
[Before concat]
g-4.n.g.fr-w1
[After concat]
.v.1n.g.fr-w1

Eu quero ter .v.1 após g-4.n.g.fr-w1 sem substituição, assim:

g-4.n.g.fr-w1.v.1

Como posso modificar meu script para ter essa saída?

    
por researcher 03.07.2015 / 14:52

1 resposta

1

Resultados estranhos ao tocar com cordas ou partes dele

Primeiro, teste seus finais de linha:

$ file test.txt
test.txt: ASCII text, with CRLF line terminators

Se você obtiver o acima e, de fato, não quiser DOS finais de linha, poderá usar o dos2unix ferramenta:

$ dos2unix test.txt
dos2unix: converting file test.txt to Unix format ...
$ file test.txt
test.txt: ASCII text

Ok, tenho meus dados em um formato consistente

Seu script deve funcionar mais ou menos conforme o planejado (aqui):

[Hostname: ]
g-4.n.g.fr-w1
[Before concat]
g-4.n.g.fr-w1
[After concat]
g-4.n.g.fr-w1.v.1

se isso não funcionar, tente:

printf "%s.v.1" "$worker"

Eu sugeriria modificar seu script para deixar claro que você está usando grep para pesquisar uma string no arquivo e remover a planície echo $var s conforme Armadilhas de Bash :

ip="10\.147\.243\.63"
worker=$(grep -e $ip $1 | awk '{ print $3; }')
printf "[Hostname: ]\n"
printf '%s\n' "$worker"
printf "[Before concat]\n"
printf '%s\n' "$worker"
printf "[After concat]\n"
printf '%s.v.1\n' "$worker"
    
por 03.07.2015 / 15:01