【问题标题】:Delete Line before and after found pattern在找到模式之前和之后删除线
【发布时间】:2014-06-05 13:01:33
【问题描述】:

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

输入

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

Sed

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

输出

...
<!--
...

希望被输出:

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

【问题讨论】:

  • 您的配置似乎是一个 XML 文档。使用适当的 XML 解析器来处理它。

标签: sed


【解决方案1】:

您的输入似乎是一个 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 ;

【讨论】:

  • 我不知道你的 sn-p 是否正确,但这是正确的方法。 +1
  • @DanFego:谢谢。我在自己创建的 server.xml 上对其进行了测试,因为没有给出示例输入文件。 :-)
  • 为正确的工作使用正确的工具几乎不是人们想要的。 :P.
【解决方案2】:

这可能对你有用(GNU sed):

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

在模式空间中保留2行并删除第一行,如果找到模式则打印下一行并删除下一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 2020-09-27
    • 2015-02-20
    • 1970-01-01
    相关资源
    最近更新 更多