2011-05-11 57 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,以防萬一。