如何在不更改最后一个0的情况下用前导零填充?

如何在不更改最后一个0的情况下用前导零填充?

输入:

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。

相关内容