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

时间:2011-05-11 10:06:13

标签: xml regex command-line sed awk

选择所需节点的正则表达式如下:

<!--\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 个答案:

答案 0 :(得分:1)

这是一个粗略的解决方案,它可能会在角落的情况下出现错误,因此请仔细测试:

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

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

{
    last_line = $0
    print
}

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