Shell实现以下功能: 通过关键词匹配到文件某一行,并在这一行末尾追加内容。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell实现以下功能: 通过关键词匹配到文件某一行,并在这一行末尾追加内容。相关的知识,希望对你有一定的参考价值。

例如:
原文件内容:
...
aaaa
bbbb 1234
bbbb 5678
cccc
...
在第一次出现bbbb的那一行的末尾追加“dddd”:
...
aaaa
bbbb 1234 dddd
bbbb 5678
cccc
...

假设文件名是1.txt
cat 1.txt | grep bbbb | head -1 | awk 'print $1,$2,dddd'
sorry看错了你的需求,上面的只是把你需要的那一行打印出来了,应该用sed来插入,也很简单
sed -i 's/bbbb 1234/bbbb 1234 dddd/' 1.txt

追问

老师,我希望能够改变原文件的内容~

追答

 sed -i 's/bbbb 1234/bbbb 1234 dddd/' 1.txt #用替换的方式



追问

还有一件事就是1234那部分内容是我无法确定的,sed工具有什么办法在匹配的关键词之后在末尾追加内容吗?老师,辛苦!

追答

我不是老师啊(⊙﹏⊙)b
据我所知,sed用a可以在关键词下一行添加,用i可以在关键词上一行添加,如果有多个关键词可以用/bbbb/s/$/ dddd/在行尾添加,但是你只要在第一个关键词后面添加,那我就没法只用一条命令搞定了,你可以先grep再head -1得到准确关键词,再用sed添加

参考技术A

试了一下,可以搞

[root@room1pc01 data]# cat aaa.txtx
aaaa
bbbb 1234
bbbb 5678
cccc
[root@room1pc01 data]# str=`grep  bbbb aaa.txtx|head -1`;sed -i "/$str/s/$/ dddd/" aaa.txtx
[root@room1pc01 data]# cat aaa.txtx
aaaa
bbbb 1234 dddd
bbbb 5678
cccc

以上是关于Shell实现以下功能: 通过关键词匹配到文件某一行,并在这一行末尾追加内容。的主要内容,如果未能解决你的问题,请参考以下文章

编写一个shell脚本文件,实现以下功能:

请问在linux下或windows下分别实现在多文件中查找关键字

linux基础命令-管理文件和目录

shell命令从目录中循环匹配关键词

原生JS如何修改某一段样式

Shell 编程实战