如何从命令行取消注释 xml 节点?

发布于 2024-11-06 13:54:22 字数 534 浏览 1 评论 0原文

选择所需节点的正则表达式类似于:

<!--\s*<env-entry>(.*\s*)*</env-entry>\s*-->

xml 文件包含的位置:

<!--
    <env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>/put/your/solr/home/here</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>
   -->
<!--
    <other-entry>
    </other-entry>
   -->

如何取消注释所选节点(可能使用 sed/awk)?

The regex to select the desired node would be something like:

<!--\s*<env-entry>(.*\s*)*</env-entry>\s*-->

where the xml file contains:

<!--
    <env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>/put/your/solr/home/here</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>
   -->
<!--
    <other-entry>
    </other-entry>
   -->

How do I uncomment the selected node (probably with sed/awk)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

喜爱纠缠 2024-11-13 13:54:22

这是一个粗略的解决方案,它可能在极端情况下存在错误,因此请仔细测试:

/<!--/ {
    comment = $0
    getline
    if ($0 !~ /<env-entry>/) print comment
}

/-->/ {
    if (last_line ~ /<\/env-entry>/) next
}

{
    last_line = $0
    print
}

更新:我忘记提及该解决方案在 AWK 中,以防万一。

Here is a crude solution, it might have bugs at corner cases, so test it out carefully:

/<!--/ {
    comment = $0
    getline
    if ($0 !~ /<env-entry>/) print comment
}

/-->/ {
    if (last_line ~ /<\/env-entry>/) next
}

{
    last_line = $0
    print
}

UPDATE: I forgot to mention the solution is in AWK, just in case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文