我必须使用sed运行此作业,而不知道值(xxx),但只知道属性(revision
)
<types name="foo" revision="xxx">
到
<types name="foo" revision="5678">
我的第一次尝试是:
sed 's@(revision=\").*@\1$5678\">@'
但它不起作用。
答案 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
选项允许修改文件到位