在使用sed首次出现搜索字符串后,在文本文件的中间插入文本

时间:2014-02-03 17:07:40

标签: bash sed

我想知道在使用GNU sed首次出现搜索字符串后是否可以在文本文件的中间插入一些文本。

例如,如果搜索字符串是“Hello”,我想在新行上第一次出现“Hello”之后插入一个字符串

Hello John, How are you?
....
....
....
Hello Mary, How are you doing? 

字符串将在“Hello John,你好吗?”之后输入。在新的一行

谢谢,

4 个答案:

答案 0 :(得分:1)

你可以说:

sed '/Hello/{s/.*/&\nSomething on the next line/;:a;n;ba}' filename

为了在第一次出现所需字符串之后插入一行,例如Hello就像你的问题一样。

对于您的样本数据,它会产生:

Hello John, How are you?
Something on the next line
....
....
....
Hello Mary, How are you doing? 

答案 1 :(得分:1)

使用sed:

sed '/Hello John, How are you?/s/$/\nsome string\n/' file
Hello John, How are you?
some string

....
....
....
Hello Mary, How are you doing? 

答案 2 :(得分:1)

使用awk

awk '/Hello/ && !f {print $0 "\nNew line";f=1;next}1' file
Hello John, How are you?
New line
....
....
....
Hello Mary, How are you doing?

此搜索标记为Hello且标记f不为真(默认为开始时)
如果是这样,打印行,打印额外文本,将标志f设置为true,跳到下一行 下次找到Hello时,标志f为真,不会做任何额外的事情。

答案 3 :(得分:1)

sed '/Hello/ a/
Your message with /
New line' YourFile

a/用于追加(后)您的模式,i/ for testert(之前)