sed查找并替换xml文件中的值
对于此作业,我必须使用sed运行,而不知道值(xxx),但只知道属性(sed查找并替换xml文件中的值,xml,bash,sed,Xml,Bash,Sed,对于此作业,我必须使用sed运行,而不知道值(xxx),但只知道属性(revision) 但它不起作用。使用以下sed方法: sed -Ei 's~( revision=")[^"]+"~\15678"~g' test.xml -E选项,允许扩展常规表达式 -i选项,允许就地修改文件您可能可以使用sed(在非常简单的情况下)完成,但对于编辑xml,这里有更好(且容易出错)的工具,如xmlstarlet。使用它很简单: xmlstarlet ed -u "//types/@revision" -
revision
)
但它不起作用。使用以下
sed
方法:
sed -Ei 's~( revision=")[^"]+"~\15678"~g' test.xml
-E
选项,允许扩展常规表达式
-i
选项,允许就地修改文件您可能可以使用sed
(在非常简单的情况下)完成,但对于编辑xml
,这里有更好(且容易出错)的工具,如xmlstarlet
。使用它很简单:
xmlstarlet ed -u "//types/@revision" -v 5678 old.xml >new.xml
编辑:
使用perl
模块的主动解决方案:
++
用于正确的方法sed
不建议用于XML
操作谢谢,jm666,但我运行的设置非常有限,只有sed可用。@pepero YMMV,但不知道哪个平台(设置)没有,例如perl
:)甚至在rPI上也可以使用perl
。解决方案类似于使用一些XML/XPath
perl模块…@jm666,一个工具太多,无法完成“sed”工作。此外,我们还必须遵守有关安装任何东西的政策。
sed 's@(revision=\").*@\1$5678\">@'
sed -Ei 's~( revision=")[^"]+"~\15678"~g' test.xml
xmlstarlet ed -u "//types/@revision" -v 5678 old.xml >new.xml
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'