如何从命令行取消注释xml节点?
选择所需节点的正则表达式如下:如何从命令行取消注释xml节点?,xml,regex,command-line,sed,awk,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-en
<!--\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)?这是一个粗略的解决方案,它可能在某些情况下存在错误,因此请仔细测试:
/<!--/ {
comment = $0
getline
if ($0 !~ /<env-entry>/) print comment
}
/-->/ {
if (last_line ~ /<\/env-entry>/) next
}
{
last_line = $0
print
}
//{
如果(最后一行~//)下一行
}
{
最后一行=$0
打印
}
更新:我忘了提到解决方案在AWK中,以防万一。1。sed需要管理连接多个行,然后才能根据您的示例进行正则表达式匹配,这是一项只有有时间的勇敢者才能进行的练习。awk可能能做到。2.我注意到您在其他一些帖子中使用了xmlstarlet。那不行吗?3.你确定你问的问题是对的吗?感觉上,您真的需要一种从主cfg文件构建specfic cfg文件的方法。我认为有很多工具可以用于这种方法(但我没有使用它们的经验)。祝你好运