sed - 匹配多行并在匹配上方插入

时间:2014-04-29 13:21:26

标签: regex bash sed

我有一个看起来像这样的文件

#multi
#line
#comment
$var1=foo

#multi
#line
#comment
$var2=bar

#############################################
#   END                                     #
#############################################

使用sed(因为我已经在我的脚本的其他地方使用了sed,我宁愿保持一致)如何匹配“END”部分,即一个或多个注释标记后跟一个cament + space + END和然后在结束部分

之前添加以下行
#############################################
# user login
#############################################

server.user=$USER
server.pswd=$PASSWD

<newline>
<newline>

请评论你回答所以我可以学习,希望不需要提出后续问题

谢谢!

1 个答案:

答案 0 :(得分:2)

 sed '/^##* END$/i\
# user login\
#############################################\
\
server.user=$USER\
server.pswd=$PASSWD\
\
\
#############################################' input

这利用了以下事实:END部分的标题块只有一行,并且与插入块的标题相同,因此我们重新使用END部分的第一行作为第一行新部分的标题,并为END块标题写一个新的第一行。 i命令告诉sed在打印缓冲区之前插入文本,转义的换行符允许我们插入多行文本。