使用命令行查找并替换

使用命令行查找并替换

我的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

使用bash

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

答案2

要将指定的文本添加到文件中的一行 -如果该行是唯一以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/'

相关内容