Bash 从修订字符串派生上一个编号
但不要为以下目标工作:Bash 从修订字符串派生上一个编号,bash,shell,unix,awk,scripting,Bash,Shell,Unix,Awk,Scripting,但不要为以下目标工作: #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.00
#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
将输入和输出字段分隔符设置为
对于每行,选择最后一个字段
捕获最后一个字段的长度,以便保持不变
从值中减去1
设置新值,确保在需要时使用正确的数字0作为前缀
打印修改行
你的${new*[!1-9]}真的应该是${new*[!0-9]}吗?当然,我更喜欢IFS=。阅读x new_\n无论你是否正确,但00999-1的工作方式与999-1不同,而且如果我这样做,我也不必在0前面加前缀[!1-9],总之它不起作用,我现在正在使用Steven Penny的解决方案,谢谢。
awk 'BEGIN {FS = OFS = "."} {$NF = sprintf("%0*d", length($NF), --$NF)} 1'