bash 变量字符串中的增量数字

Nic*_*oul 5 bash awk arithmetic

VERSION="4.0beta12"
NEXT_VERSION=?????
Run Code Online (Sandbox Code Playgroud)

编写自动发布脚本,我在变量 $VERSION 中有当前版本,我想将下一个版本计算为 $NEXT_VERSION。

规则:增加字符串末尾的整数。
4.0beta12?4.0beta13
4.2alpha9 ? 4.2alpha10

我已经尝试过 sed/awk/eval 但不能让它工作。想法?任何工具都可以。

jan*_*sen 7

除了 Bash 不需要任何东西:

for version in 12.4alpha9 12.4alpha12 12.4alpha-2; do
    echo -n "$version => ";
    [[ "$version" =~ (.*[^0-9])([0-9]+)$ ]] && version="${BASH_REMATCH[1]}$((${BASH_REMATCH[2]} + 1))";
    echo "$version";
done
Run Code Online (Sandbox Code Playgroud)

与您真正相关的唯一一行是带有正则表达式检查的那一行[[:它记住导致最终数字的所有内容,重用该数字并附加下一个数字。


Ulr*_*arz 5

假设你总是有一些合理的格式规则(版本中总是非数字,版本总是以数字结尾),这可能是一个开始:

#!/usr/bin/gawk -f
1 {
    pfx = gensub(/^(.*[^0-9])([0-9]+)$/, "\\1", "")
    patchlevel = gensub(/^(.*[^0-9])([0-9]+)$/, "\\2", "")

    new_pl = (1*patchlevel)+1
    printf "%s%s\n", pfx, new_pl
}
Run Code Online (Sandbox Code Playgroud)

测试:

[0 1066] ~/temp % echo "12.4alpha9" | gawk -f incvers.awk
12.4alpha10
[0 1067] ~/temp % echo "12.4alpha12" | gawk -f incvers.awk
12.4alpha13
[0 1068] ~/temp % echo "12.4alpha-2" | gawk -f incvers.awk
12.4alpha-3
Run Code Online (Sandbox Code Playgroud)