Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sed查找并替换xml文件中的值_Xml_Bash_Sed - Fatal编程技术网

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

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" -

对于此作业,我必须使用sed运行,而不知道值(xxx),但只知道属性(
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'