如何使用shell脚本sed命令替换XML文件的属性?

时间:2017-12-10 12:20:52

标签: xml bash shell ionic-framework sed

<?xml version='1.0' encoding='utf-8'?>
<widget id="io.ionic.starter" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
...
</widget>

如何使用sed?

替换widget中的id和version

2 个答案:

答案 0 :(得分:1)

Sed不是处理XML的正确工具,因为属性可能以不同的顺序和不同的行显示,同时仍然保持相同的语义。

使用XML感知工具。例如,在xsh(我目前维护的XML::LibXML的包装器)中,您可以写

open file.xml ;
register-namespace w http://www.w3.org/ns/widgets ;
set /w:widget/@id "new.id" ;
set /w:widget/@version "0.0.2" ;
save :b ;  # :b creates a backup.

答案 1 :(得分:1)

使用xmlstarlet:

xmlstarlet edit -N x='http://www.w3.org/ns/widgets' \
                --update "//x:widget/@id" --value "foo" \
                --update "//x:widget/@version" --value "bar" file.xml

输出:

<?xml version="1.0" encoding="utf-8"?>
<widget xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" id="foo" version="bar">
...
</widget>

如果您想在地方编辑文件,请添加选项-L