コマンドラインを使用して検索と置換

コマンドラインを使用して検索と置換

私のlog.txtファイルには以下が含まれます。

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

どのように交換できますか?

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

そして

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

コマンドラインから?つまり、0.0.0.0/0行末に追加したいのです。

答え1

sedを使う

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

awkを使う

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

または

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

バッシュを使って

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

答え2

ファイルの1行に指定されたテキストを追加するには -行が次に終わる唯一の行である場合mynetworks、次のようにすることができます。

sed --in-place '/^mynetworks/s_.*_& 0.0.0.0/0_' /path/to/file

答え3

私はPerlを主に使用する方です。この場合、sedまたはawkは機能しますが、時にはPerlの柔軟性が役に立つことがあります。

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

またはパイプチェーンにある場合

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

関連情報