【发布时间】:2021-11-01 17:18:45
【问题描述】:
我编写这段代码是为了从一个文件中提取软件版本并在另一个文件中覆盖它:
newVersion=$(sed -r -n 's/<version>(.*-SNAPSHOT)<\/version>/\1/p' sa-pom.xml)
find ./pom.xml -type f -exec sed -r -i -e "s/<version>(.*-SNAPSHOT)<\/version>/<version>${newVersion}<\/version>/g" {} \;
echo '<version>'$newVersion'</version>'
它可以工作,但它在支持变量中放置一个空格,在目标文件中放置三个空格,分别生成以下输出:
<version> 0.19.6-SNAPSHOT</version>
<version> 0.19.6-SNAPSHOT</version>
这是 sa-pom.xml 文件的剪辑版:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my-group-id</groupId>
<artifactId>my-artifact-id</artifactId>
<version>0.19.9-SNAPSHOT</version>
<packaging>jar</packaging>
<name>my-project-name</name>
</project>
这是 pom.xml 文件的剪辑版:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>my-group-id</groupId>
<artifactId>my-parent-artifact-id</artifactId>
<version>${revision}</version>
</parent>
<artifactId>my-artifact-id</artifactId>
<version>0.19.8-SNAPSHOT</version>
<packaging>jar</packaging>
<name>my-project-name</name>
</project>
如何解决?
【问题讨论】:
-
在版本号中使用
-SNAPSHOT可能会成为计算机历史上最糟糕的做法。
标签: string file unix sed replace