#bash shell
new="r.9.9.10.6.00999"
new_ver=${new##*[!1-9]}; prefix=${new%%$new_ver}
old=${prefix}$((new_ver-1))
echo old=${old} ###prints old=r.9.9.10.6.00998
但不适合:
new="r.9.9.10.6.00100" #need to make old=r.9.9.10.6.00099
new="r.9.9.10.6.01000" #need to make old=r.9.9.10.6.00999
因为new_ver
变空了,在这种情况下获取上一版本的最佳方法是什么?
答案 0 :(得分:3)
这比您的解决方案稍微不那么脆弱:
awk 'BEGIN {FS = OFS = "."} {$NF = sprintf("%0*d", length($NF), --$NF)} 1'
将输入和输出字段分隔符设置为.
每行,选择最后一个字段
捕获最后一个字段的长度,因此我们可以保持相同
从值
设置新值,确保在需要时使用正确的0
前缀
打印修改后的行