两个附加在单个sed命令中

时间:2018-01-04 00:59:53

标签: shell sed syntax delimiter

使用sed搜索关键字后,在文本中添加新行很容易:

for i in 1 2 3 4 5; do echo "line $i"; done |\
  sed '/line 3/a after three'
line 1
line 2
line 3
after three
line 4
line 5

我习惯使用像

这样的半开关来搜索/替换命令s

sed 's/alpha/foo/;s/beta/bar/'

但这不适用于追加命令a

for i in 1 2 3 4 5; do echo "line $i"; done |\
  sed '/line 3/a after three;/line 5/a this is the end'
line 1
line 2
line 3
after three;/line 5/a this is the end
line 4
line 5

a命令的结束分隔符是什么(也可能适用于i)?免责声明:我对像几个管道的解决方法不感兴趣 sed命令或在命令行上有多个-e选项。

2 个答案:

答案 0 :(得分:1)

我建议GNU sed使用两个脚本:

sed -e '/line 3/a after three' -e '/line 5/a this is the end'

或在命令;中用换行符替换结束追加命令:

sed '/line 3/a after three
/line 5/a this is the end'

或不附加。 &包含正则表达式的匹配部分:

sed 's/line 3/&\nafter three/;s/line 5/&\nthis is the end/'

答案 1 :(得分:0)

这可能适合你(GNU sed& Bash):

sed $'/line 3/a after three\n/line 5/a this is the end' file

这与sed几乎没有关系,但使用bash来解释sed命令变量。在acirRwW等sed命令必须以换行符,因此这种方法可以用于他们的利益。但是,现在必须引用元字符,即\n变为\\n,因此将命令分成单独的部分可能是优选的,即

sed -e '/line 3/a after three' -e '/line 5/a this is the end' file