linux – 在sed 中添加前导0

参见英文答案 > Is it possible to pad integers with zeros using regular expressions?                                    2个
我想将前导零添加到一串数字中,以便正好有三位数.例如,考虑一下

echo "hello_1"   | sed -E 's/([0-9]+)/00\1/'  # hello_001
echo "hello_12"  | sed -E 's/([0-9]+)/0\1/'   # hello_012
echo "hello_123" | sed -E 's/([0-9]+)/\1/'    # hello_123

现在,问题在于我在这里使用了三种不同的表达式,而我在一条管道中将多条线路连接起来.就像是

printf "hello_1\nhello_12\nhello_123\n" | sed -E 's/([0-9]+)/0\1/'
hello_01
hello_012
hello_0123

结果不是我要找的那个.预期的产出是

hello_001
hello_012
hello_123

我试过了

printf "hello_1\nhello_12\nhello_123\n" |  sed -r ":r;s/\b[0-9]{1,$((3-1))}\b/0&/g;tr"
hello_1
hello_12
hello_123

我从this post获得,但它不起作用,我不明白它是如何工作的.

我在Linux上使用GNU sed版本4.2.1

解决方法:

如果你可以考虑awk那么使用printf会容易得多:

printf "hello_1\nhello_12\nhello_123\n" | awk -F_ '{printf "%s%s%03d\n", $1, FS, $2}'

hello_001
hello_012
hello_123

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...