sed用来替换一些字符与新文本之间的文本

时间:2014-01-13 08:14:10

标签: regex bash sed

我有一个问题,我无法弄明白。

我在xml文件中有这样的东西:

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

我想改变这就像使用sed:

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

我的问题是:我可以使用sed替换“<tag ... >”之间的文字吗?

感谢您的帮助:)

2 个答案:

答案 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>