2011-05-11 66 views
0

选择所需的节点会是这样的正则表达式:如何从命令行取消对xml节点的注释?

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

+0

1. sed需要管理加入多行,然后才能按照您的示例进行正则表达式匹配,这仅仅是为了勇敢的练习而已。 awk可以做到这一点。我在使用xmlstarlet的其他一些帖子中注意到了。不能这样做吗? 3.你确定你问的是正确的问题吗?感觉就像你真的想要一种从主cfg文件构建specfic cfg文件的方式。我认为有很多工具可以用于这种方法(但我没有经验)。祝你好运! – shellter 2011-05-11 15:10:29

回答

1

这里是粗的解决方案,它可能在极端情况的错误,所以请仔细测试一下:

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

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

{ 
    last_line = $0 
    print 
} 

更新:我忘了提的方案是在AWK,以防万一。