我有一个问题,我无法弄清楚。
我在xml文件中有这样的东西:
<tag desc="some desc can be different" dep="dep" >value</tag>
我想像使用 sed 一样更改它:
<tag desc="NEW DESC" dep="dep" >value</tag>
我的问题是:我可以使用 sed 将"<tag ... >
"之间的文本替换为新文本吗?
感谢您的帮助:)
由于您没有尝试真正解析 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
感谢您的快速回答:)
我做了这样的事情:
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>