我有一个问题,我无法弄明白。
我在xml文件中有这样的东西:
<tag desc="some desc can be different" dep="dep" >value</tag>
我想改变这就像使用sed:
<tag desc="NEW DESC" dep="dep" >value</tag>
我的问题是:我可以使用sed替换“<tag ... >
”之间的文字吗?
感谢您的帮助:)
答案 0 :(得分: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
答案 1 :(得分:0)
感谢您快速回答:)
我做过这样的事情:
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>