【发布时间】:2021-10-17 18:01:18
【问题描述】:
样本输入:
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.in28minutes.microservices</groupId>
<artifactId>currency-exchange-service</artifactId>
<version>3.0.3</version>
<name>currency-exchange-service-docker</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>16</java.version>
<spring-cloud.version>2020.0.2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
</dependencies>
</project>
预期输出:
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.in28minutes.microservices</groupId>
<artifactId>currency-exchange-service</artifactId>
<version>3.0.4</version>
<name>currency-exchange-service-docker</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>16</java.version>
<spring-cloud.version>2020.0.2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
</dependencies>
</project>
我已经计算了 3.0.4 并使用 var2 变量来存储它。 我是用这个命令更新的
sed -i "s/<version>.*<\/version>/<version>$var2<\/version>/" pom.xml
但它正在更改每个版本标签下的版本。 但我需要更改将项目作为父标签的版本标签下的值。
我试过了
sed -i "s/<project><version>.*<\/version>/<project><version>$var2<\/version>/" pom.xml
但它不起作用。
我的脚本.sh
#!/bin/sh
var1=$(echo '${project.version}' | mvn help:evaluate | grep -v '^[[]')
var2=$(echo "$var1" | awk -F. -v OFS=. '++$NF')
sed -i "s/<version>.*<\/version>/<version>$var2<\/version>/" pom.xml
echo "$var2"
【问题讨论】:
-
缺少示例数据和预期输出。
-
sed 的格式是“s/some to change/replace with/”,你有很多/
-
@Jotne 我对 sed 了解不多。我正在为 CI 编写脚本。我需要在其中更新 pom.xml 的版本。知道我需要在上述 sed 命令中更改什么以使其正常工作。
-
Don't Parse XML/HTML With Regex. 我建议使用 XML/HTML 解析器 (xmlstarlet, xmllint ...)。
-
@EdMorton 正如你所提到的,我已经更新了我的问题。