如何使用sed在“test message1”之后添加新行?

Beg*_*ner 13 sed

实际上我有一个名为test1.txt.

在该文件中,我有以下五行:

 'test message1'
 'test message2'
 'test message3'
 'test message4'
 'test message5'
Run Code Online (Sandbox Code Playgroud)

现在我想添加一个新行'testing testing'test1.txt文件,后'test message1'线。怎么做?

Mic*_*mer 21

这是a命令的作用:

sed -e "/test message1/a\\
'testing testing'" < data
Run Code Online (Sandbox Code Playgroud)

此命令将:

将跟随此命令的文本行(除了最后一个以 \ 结尾的每一行都从输出中删除)排队,以便在当前循环结束时或读取下一个输入行时输出。

所以在这种情况下,当我们匹配一行时/test message1/,我们运行a带有文本参数“ 'testing testing'”的命令ppend ,它成为文件的新行:

 'test message1'
 'testing testing'
 'test message2'
 'test message3'
 'test message4'
 'test message5'
Run Code Online (Sandbox Code Playgroud)

您可以通过用反斜杠结束每一非最终行来插入多行。上面的双反斜杠是为了防止shell吃掉它;如果您在独立sed脚本中使用它,则使用单个反斜杠。GNU 也sed接受紧随其后的单行文本a,但这不可移植。

  • @vwvan 使用单个反斜杠,然后将 `\n` 作为下一行的第一个字符,我只会插入一个 `n`(而不是换行符)。所以也许双反斜杠可以确保如果第一个字符是转义序列,它将被插入而不是与 `a` 命令旁边的反斜杠分组。 (2认同)

Joh*_*ith 4

sed

sed "s/'test message1'/'test message1'\n'testing testing'/g"
Run Code Online (Sandbox Code Playgroud)
  • 搜索“测试消息 1”
  • 替换为“测试消息1”[新行]“测试测试”。

这个答案中,您还可以使用:

sed "/'test message1'/a 'testing testing'"
Run Code Online (Sandbox Code Playgroud)
  • 搜索“测试消息 1”
  • 在比赛后添加“测试测试”。