我想知道在使用GNU sed首次出现搜索字符串后是否可以在文本文件的中间插入一些文本。
例如,如果搜索字符串是“Hello”,我想在新行上第一次出现“Hello”之后插入一个字符串
Hello John, How are you?
....
....
....
Hello Mary, How are you doing?
字符串将在“Hello John,你好吗?”之后输入。在新的一行
谢谢,
答案 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(之前)