找到模式前后删除行

时间:2014-06-05 13:01:33

标签: sed

我有一个禁用的配置,因为它嵌入在注释中。 我的Sed正在删除模式下面的行,但是带有模式的行也会被删除。我可以告诉Sed保留当前行吗?或者只删除找到的模式之前和之后的行。

输入

...
<!--
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-->
...

桑达

# sed -e '/<Connector port="8009" protocol="AJP\/1.3" redirectPort="8443" \/>/,+2d' server.xml

输出

...
<!--
...

希望成为输出:

...
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
...

2 个答案:

答案 0 :(得分:3)

您的输入似乎是一个XML文档。使用适当的解析器来处理它。例如,xsh

open server.xml ;
for my $c in //comment()[contains(.,'<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />')]
    xinsert chunk $c replace $c ;
save :b ;

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed '$!N;/\n<Connector port="8009" protocol="AJP\/1.3" redirectPort="8443" \/>/{s/.*\n//p;$!N;d};P;D' file

在图案空间中保留2行并删除第一行,打印下一行并在找到图案时删除以下行。