使用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
选项。
答案 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命令变量。在a
,c
,i
,r
,R
,w
和W
等sed命令必须以换行符,因此这种方法可以用于他们的利益。但是,现在必须引用元字符,即\n
变为\\n
,因此将命令分成单独的部分可能是优选的,即
sed -e '/line 3/a after three' -e '/line 5/a this is the end' file