繁体   English   中英

是否可以使用正则表达式用0填充整数?

[英]Is it possible to pad integers with zeros using regular expressions?

在某些文本中,我有一系列不同长度(从1到6位数不等)。 我想通过用零填充较短的数字来均衡所有这些数字的长度。

例如以下4行 -

A1:11
A2:112
A3:223333
A4:1333
A5:19333
A6:4

应该成为填充整数

A1:000011
A2:000112
A3:223333
A4:001333
A5:019333
A6:000004

我正在使用“sed”和以下的精简表达式:

sed -e 's/:\([0-9]\{1\}\)\>/:00000\1/' \
    -e 's/:\([0-9]\{2\}\)\>/:0000\1/' \
    -e 's/:\([0-9]\{3\}\)\>/:000\1/' \
    -e 's/:\([0-9]\{4\}\)\>/:00\1/' \
    -e 's/:\([0-9]\{5\}\)\>/:0\1/'

是否有可能以比这更好的表达方式做到这一点?

你可以用太多的零填充它,然后只保留最后六位数:

sed -e 's/:/:00000/;s/:0*\([0-9]\{6,\}\)$/:\1/'

结果:

A1:000011
A2:000112
A3:223333
A4:001333
A5:019333
A6:000004

尽管使用awk可能更好:

awk -F: '{ printf("%s:%06d\n", $1, $2) }'

这是一个perl解决方案:

 perl -n -e 'split /:/;printf("%s:%06d\n", @_)'

你问了一个正则表达式,所以我找了一个用正则表达式拆分的冒号,但在这种情况下,一个简单的字符串就足够了。

[pti@os5 ~]$ cat tst.txt | perl -n -e 'split /:/;printf("%s:%06d\n", @_)'
A1:000011
A2:000112
A3:223333
A4:001333
A5:019333
A6:000004

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM