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 但不能让它工作。想法?任何工具都可以。
除了 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)
与您真正相关的唯一一行是带有正则表达式检查的那一行[[:它记住导致最终数字的所有内容,重用该数字并附加下一个数字。
假设你总是有一些合理的格式规则(版本中总是非数字,版本总是以数字结尾),这可能是一个开始:
#!/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)
| 归档时间: |
|
| 查看次数: |
14550 次 |
| 最近记录: |