sed查找并替换xml文件中的值

时间:2017-03-16 12:52:27

标签: xml bash sed

我必须使用sed运行此作业,而不知道值(xxx),但只知道属性(revision

<types name="foo" revision="xxx">

<types name="foo" revision="5678">

我的第一次尝试是:

sed 's@(revision=\").*@\1$5678\">@'

但它不起作用。

2 个答案:

答案 0 :(得分:2)

您可能可以完成sed(在非常简单的情况下),但是对于编辑xml,这里有更好(且容易出错)的工具,例如xmlstarlet。使用它很简单:

xmlstarlet ed -u "//types/@revision" -v 5678 old.xml >new.xml

编辑:

使用perl&amp;的Alernative解决方案XML::LibXML模块:

perl -MXML::LibXML -E '$d=XML::LibXML->load_xml(location=>q{file.xml});$_->setAttribute(q{revision},4567)for$d->findnodes(q{//types[@revision]});say $d'

答案 1 :(得分:1)

使用以下sed方法:

sed -Ei 's~( revision=")[^"]+"~\15678"~g' test.xml

-E选项,允许扩展常规表达

-i选项允许修改文件到位