[英]Parsing version out of a pom.xml in bash
Here is a snippet from my shell script - 这是我的shell脚本的片段 -
regex="<version>([0-9]*)\.([0-9]*)\.([0-9]*)([^<]*)<\/version>.*"
#some unrelated lines of code
echo $(grep -m 1 "<version>" $1)
if [[ $(grep -m 1 "<version>" $1) =~ $regex ]]
then
main_version = "${BASH_REMATCH[1]}"
feature_version = "${BASH_REMATCH[2]}"
patch_version = "${BASH_REMATCH[3]}"
tag = "${BASH_REMATCH[4]}"
else
echo "$1: Version not Found" >&2
fi
But it is showing me the following output - 但它向我展示了以下输出 -
<version>1.1.7-release</version> <!-- ABC version -->
abc/xyz/pom.xml: Version not Found
But according to my understanding, regex
should match with the output of grep
(i echoed it to terminal for better clarity). 但根据我的理解, regex
应该与grep
的输出匹配(为了更清晰,我将它回显到终端)。 So can someone tell what am i doing wrong? 那么有人能说出我做错了什么吗?
pom.xml 的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>com.company.abc</groupId>
<artifactId>abc</artifactId>
<version>1.1.7-release</version> <!-- abc version -->
</project>
Using XMLStarlet : 使用XMLStarlet :
regex='^([0-9]*)[.]([0-9]*)[.]([0-9]*)(.*)'
version=$(xmlstarlet sel -N mvn='http://maven.apache.org/POM/4.0.0' \
-t -m '/mvn:project/mvn:version' -v . -n <pom.xml)
if [[ $version =~ $regex ]]; then
main_version="${BASH_REMATCH[1]}"
feature_version="${BASH_REMATCH[2]}"
patch_version="${BASH_REMATCH[3]}"
tag="${BASH_REMATCH[4]}"
declare -p main_version feature_version patch_version tag
else
echo "Could not extract or parse version tag" >&2
fi
...properly emits as output, given your pom.xml
: ...根据你的pom.xml
,正确地作为输出发出:
declare -- main_version="1"
declare -- feature_version="1"
declare -- patch_version="7"
declare -- tag="-release"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.