Jos*_*osh 7 sed text-processing
我知道 sed 可以像这样替换文本文件中的一段字符串:
sed -i 's/oldstring/newstring/g' test.txt
Run Code Online (Sandbox Code Playgroud)
但是,如果该行存在,我该如何替换它,如果它不存在,如何自动将其添加到新行中?
谢谢。
编辑:感谢您的回复。根据您对评论和回答的要求,这里有更多详细信息:
ter*_*don 12
这样做的一种方法是将其grep纳入等式。首先检查文件是否包含带有 quick 的字符串,grep然后相应地附加或替换:
grep -q string file &&
sed -i 's/string/newstring/' file || echo "newstring" >> file
Run Code Online (Sandbox Code Playgroud)
以上是速记的写法:
if grep -q string file; then
sed -i 's/string/newstring/' file
else
echo "newstring" >> file
fi
Run Code Online (Sandbox Code Playgroud)
然而,就我个人而言,我会用perl它来代替。如果进行了替换,只需读取文件一次并将变量设置为 1。然后,最后,如果变量不是 1,则添加字符串:
perl -lpe '$i=1 if s/oldstring/newstring/;
END{print "newstring" if $i!=1;}' file > tmpfile && mv tmpfile file
Run Code Online (Sandbox Code Playgroud)