2014-01-13 35 views
0

我有一個問題,我無法弄清楚。sed用於替換一些字符之間的文本與新文本

我在XML文件中是這樣的:

<tag desc="some desc can be different" dep="dep" >value</tag> 

我想改變這個喜歡用sed來:

<tag desc="NEW DESC" dep="dep" >value</tag> 

我的問題是:我可以用sed來替換<tag ... >之間「文本「用新的?

感謝您的幫助:)

+3

XML和HTML是*不是*常規語言。因此,試圖用像'sed'這樣的RE工具來解析HTML可能是一種災難。 – DopeGhoti

+2

您當然可以,但請記住[正則表達式不適用於解析(X)HTML](http://stackoverflow.com/a/1732454/1807643)。 –

回答

4

既然你是不是想真正解析XML SED可以幫助你:

sed -i 's/\(<tag[^>]*[ ]*desc[ ]*\)=[ ]*"[^"]*"/\1="NEW DESC"/g' input.xml 

但是,如果你想有一個強大的解決方案,使用xmlstarlet

xmlstarlet edit -L -u "//tag/@desc" -v "NEW DESC" input.xml 
0

感謝快速回答:)

我做了什麼LIK e此:

typeset repTagdesc='desc="NEW DESC" dep="dep"' 
sed -i "s&\(<tag\).*\(>.[0-9]\)&\1 ${repTagdesc}\2&" input.xml 

此解決方案是否正常?我不熟悉sed,這就是爲什麼我問。 我檢查它的作品爲:

<tag>10</tag> 
<tag desc="some desc" dep="dep">20</tag> 
<tag desc="other desc" dep="dep">30</tag>