【问题标题】:How to uncomment an xml node from the command line?如何从命令行取消注释 xml 节点?
【发布时间】:2011-08-23 04:19:23
【问题描述】:

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

<!--\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)?

【问题讨论】:

  • 1. sed 需要管理加入多行,然后才能根据您的示例进行正则表达式匹配,这是一项仅适用于有时间的勇敢者的练习。 awk 可能可以做到。 2. 我注意到您在其他一些帖子中使用 xmlstarlet。不能这样做吗? 3. 你确定你问对了问题吗?感觉就像您真的想要一种从主 cfg 文件构建特定 cfg 文件的方法。我认为有许多工具可用于该方法(但我没有使用它们的经验)。祝你好运!

标签: xml regex command-line sed awk


【解决方案1】:

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

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

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

{
    last_line = $0
    print
}

更新:我忘了提到解决方案是在 AWK 中,以防万一。

【讨论】:

    猜你喜欢
    • 2012-12-08
    • 2014-06-08
    • 1970-01-01
    • 2016-12-10
    • 2018-05-31
    • 2022-01-20
    • 2018-05-07
    • 2015-09-19
    相关资源
    最近更新 更多