如果在shell脚本中找不到,如何找到替换行或附加到文件末尾?

时间:2016-09-06 06:52:21

标签: bash shell unix sed

我推荐了帖子:

Sed command : how to replace if exists else just insert?

https://superuser.com/questions/590630/sed-how-to-replace-line-if-found-or-append-to-end-of-file-if-not-found

但是没有一个解决方案似乎有效。任何人都可以解释原因吗?

我只是通过制作特定文件

来执行终端上的命令
sed -e 's/^avpgw/new text/' -e t -e 's/^av/new text/' -e t -e 's/^/new text/' file

sed '/^FOOBAR=/{h;s/=.*/=newvalue/};${x;/^$/{s//FOOBAR=newvalue/;H};x}' infile

2 个答案:

答案 0 :(得分:3)

测试用例:

$ cat > file
match
miss

awk中的解决方案:

$ awk 'sub(/match|$/,"hit")' file
hit
misshit

即。替换第一个match或结束记录$,以先到者为准。

答案 1 :(得分:0)

使用sed

sed '/match/{s/match/replace/g;p;D}; /match/!{s/$/replace/g;p;D}' file

<强>测试

$ cat file
some text... match ... some text
some text only here...
..... here also...

$ sed '/match/{s/match/replace/g;p;D}; /match/!{s/$/replace/g;p;D}' file
some text... replace ... some text
some text only here...replace
..... here also...replace

注意:的 使用-i来编辑文件。