Localizar e substituir com linha de comando

1

meu arquivo log.txt inclui

...
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
...

como posso substituir

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

com

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 0.0.0.0/0  

da linha de comando? Em outras palavras, quero adicionar 0.0.0.0/0 ao final dessa linha.

    
por Mehran Goudarzi 21.06.2016 / 07:24

3 respostas

1

Para adicionar o texto especificado a uma linha no arquivo - se essa linha for a única que começa com mynetworks , você pode fazer isso:

sed --in-place '/^mynetworks/s_.*_& 0.0.0.0/0_' /path/to/file
    
por 21.06.2016 / 07:49
3

Usando sed

sed -i 's+^mynetworks.*+& 0.0.0.0/0+' log.txt

Usando o awk

awk '/^mynetworks/ {$0=$0" 0.0.0.0/0"} 1' log.txt

ou

awk '{if ($1 ~ /^mynetworks/) print $0, "0.0.0.0/0"; else print $0}' log.txt

Usando o bash

while read -r line ; do
    [[ $line == mynetworks* ]] && line+=" 0.0.0.0/0"
    echo "$line"
done < log.txt
    
por 21.06.2016 / 07:48
0

Eu costumo usar o Perl. sed ou awk é bom neste caso, mas às vezes a flexibilidade é Perl é útil.

perl -pi -e 's/^(mynetworks.*)/$1 0.0.0.0\/0/' /path/to/file

ou se isso estiver em uma cadeia de tubos

cat file | perl -pe 's/^(mynetworks.*)/$1 0.0.0.0\/0/'
    
por 21.06.2016 / 11:55