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
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.
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
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/'
Tags grep text-processing awk sed