使用 sed 命令更新 pom.xml 文件中的版本

问题描述 投票:0回答:3
unix sed
3个回答
2
投票
$ xmlstarlet edit --update '//project/version' --value '3.0.4' file.xml
<?xml version="1.0"?>
<project>
  <version>3.0.4</version>
  <dependencies>
    <dependency>
      <version>1.2.5.RELEASE</version>
    </dependency>
  </dependencies>
</project>

0
投票

这个 sed 应该做:

sed "/<version>/s/>.*</>${var2}</" pom.xml
<project>
       <version>3.0.4</version>
</project>

它搜索带有

<version>
的行,然后替换 >xxx< with the variable.

之间的数据

使用正则表达式,您可以确保要查找的内容不会太多。

sed -E "/<version>/s/>[^<]+</>${var2}</" pom.xml

如果您需要确保它不会更改除

version
之后的其他
project
,您可以使用
awk

awk -v var=$var2 '/<project>/ {f=1} f && /<version>/ {sub(/>[^<]+</,">"var"<")} 1' pom.xml
<project>
       <version>3.0.4</version>
</project>

测试

project
并在下一行更改

的 Sed 版本
sed -E '/<project>/!b;n;s/<version>[^<]+</<version>'$var2'</' pom.xml
<project>
       <version>3.0.4</version>
</project>

0
投票
xmlstarlet  edit -P --inplace --update '/_:project/_:version' --value '3.0.0' pom.xml

_:
前缀背后的原因是,每个设置了 xmlns 属性的 XML 元素在引用时都应以命名空间为前缀,在提供的
pom.xml
文件的情况下,设置了 xmlns 属性,但命名空间为未指定,这将使 xmlstarlet 回退到默认命名空间,即
_

© www.soinside.com 2019 - 2024. All rights reserved.