替换或添加字符串到文件

Jos*_*osh 7 sed text-processing

我知道 sed 可以像这样替换文本文件中的一段字符串:

sed -i 's/oldstring/newstring/g' test.txt
Run Code Online (Sandbox Code Playgroud)

但是,如果该行存在,我该如何替换它,如果它不存在,如何自动将其添加到新行中?

谢谢。

编辑:感谢您的回复。根据您对评论和回答的要求,这里有更多详细信息:

  • 我想检查旧字符串是否存在,如果存在,则用新字符串替换它。
  • 如果旧字符串不存在,我想在txt文件末尾的新行中添加新字符串
  • 如果同一个字符串出现多次,因为是配置文件,会报错。其他出现的可以在替换第一次后删除。

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)