如何在bash中删除pom文件中的版本号

Ale*_*son 3 xml bash grep sed maven

我有一个pom文件,其中包含以下信息:

<modelVersion>4.0.0</modelVersion>
  <groupId>com.site.camera</groupId>
  <artifactId>proj3</artifactId>
  <packaging>pom</packaging>
  <version>2.6</version>
  <name>Proj 3</name>
Run Code Online (Sandbox Code Playgroud)

我正在编写一个bash脚本,并希望能够打开这个文件(pom.xml)并删除版本(例如在这种情况下为2.6).我这样做是因为当我更新版本时,我希望我的脚本的其余部分用它来更新.

我尝试过的事情:

var=$(grep <version>2.6</version> pom.xml)
echo $var
Run Code Online (Sandbox Code Playgroud)

请注意,我在pom文件中有多个版本参数.我需要这个特定的版本,包含这个名称,包装,artifactId等.

tha*_*guy 7

有些人反对使用正则表达式解析XML.以下是您如何正确而有力地执行以下操作xmlstarlet:

$ cat pom.xml 
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.site.camera</groupId>
  <artifactId>proj3</artifactId>
  <packaging>pom</packaging>
  <version>2.6</version>
  <name>Proj 3</name>
</project>

$ xmlstarlet sel -t -v '/project/version' pom.xml 
2.6
Run Code Online (Sandbox Code Playgroud)

在XML工具和编辑器使用您的文档后,这同样适用:

$ cat pom.xml 
<project>
  <version><![CDATA[2]]>&#x002E;6
  </version>
</project>

$ xmlstarlet sel -t -v '/project/version' pom.xml 
2.6
Run Code Online (Sandbox Code Playgroud)

编辑:作为"正确行动"(tm)的证明,在指出将有许多不同版本标签后,此解决方案仍然可以正常工作.


Vyt*_*nis 5

使用maven你这样做:

echo '${project.version}' | mvn help:evaluate | grep -v '^[[]'
Run Code Online (Sandbox Code Playgroud)