私の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/'