使用正则表达式和SED替换XML内容

时间:2017-08-01 07:31:44

标签: regex xml bash sed

我有一个项目,实际上是2个maven项目。在“child”maven项目中,我有一个引用父项目中的版本的属性:

<myparent.project.version>15.0.0-SNAPSHOT</myparent.project.version>

我正在尝试做的是将一些常用命令bash脚本放在一起,即在创建发布分支时,我想创建一个父maven项目,然后更新子maven父项目,但我不知道如何更新这个值:

我希望得到一些工作方面的东西: 其中newVersion = 16.0.0

$ sed -i "s/\<myparent.project.version\>[0-9.]+-SNAPSHOT\<\/myparent.project.version\>/<myparent.project.version>$newVersion-SNAPSHOT<\/myparent.project.version>/g" pom.xml

我已经使用https://regex101.com/检查了正则表达式(\<myparent.project.version\>[0-9.]+-SNAPSHOT\<\/myparent.project.version\>)并且它与我要在pom.xml文件中替换的行匹配,但由于某种原因,我无法将sed与工作正常。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您应该使用像XMLStarlet这样的xml解析器。也就是说,对于那个简单的替换,你可以试试这个GNU sed:

sed "s/<myparent\.project\.version>[0-9.]\+-SNAPSHOT<\/myparent\.project\.version>/<myparent.project.version>$newVersion-SNAPSHOT<\/myparent.project.version>/g" file

您必须转义一个或多个量词:\+和点:\.,但不能转义<>\<和{{1}用于GNU sed的单词边界