使用sed更改XML属性的值

时间:2017-07-13 12:37:14

标签: xml bash sed

我需要在我的xml文件的version属性值中添加内部版本号:

<widget id="com.test.enterprise.operationsnew" version="2.4.2.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">

在我的bash脚本中,我尝试过:

BUILD_NUMBER=1
VERSION="$(xmllint \
  -xpath 'string(//*[local-name()="widget"]/@version)' config.xml | \
  cut -f1-3 -d.)"
CFBundleVersion="${VERSION}.${BUILD_NUMBER}"

sed -i '' \
  -e 's#version="[0-9].[0-9].[0-9].[0-9]"#version="${CFBundleVersion}"#g' \
  config.xml

CFBundleVersion变量确实已插入但未解析:

<widget id="com.test.enterprise.operationsnew" version="${CFBundleVersion}" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">

如何使用sed正确执行此操作?

1 个答案:

答案 0 :(得分:1)

 sed -e 's#version="[0-9].[0-9].[0-9].[0-9]"#version="'${CFBundleVersion}'"#g' config.xml

在变量周围添加单引号以展开它。