简体   繁体   English

在bash中解析pom.xml中的版本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM