输入:
x3blah0blah4blahblah48blah0
预期输出:
x003blah000blah004blahblah048blah0
我想将所有数字填充为 3 位数字(不包括最后一个零数字)。到目前为止,我有:
sed 's/\([0-9]\)/00\1/g'
但是,如果有 2 位数字,则将其填充为 4。我也不知道如何排除最后一个零。
答案1
perl -pe 's/\d++(?!$)/sprintf"%03d",$&/ge'
将用零填充行尾未找到的十进制数字序列,长度为 3。
如果字符串位于 shell 变量中并且该 shell 是 zsh:
set -o extendedglob
new_string=${string//(#m)<->[^0-9]/${(l[4][0])MATCH}}
将后跟非数字的数字序列用 0 填充(并截断)至长度 a 3。