使用sed填充带有零的一位,两位和三位数字

时间:2017-10-05 16:16:19

标签: bash awk sed pad

我正在编写一个bash脚本,用零填充一位,两位和三位数字。例如:

file.txt

2
22
222
2222
a2a2
2a2a
a22a
2aa2
22a2

output.txt

0002
0022
0222
2222
a0002a0002
0002a0002a
a00022a
0002aa0002
0022a0002

此脚本的目的是填充数字,直到它们达到最多4位数。

我必须使用sed命令。我想这样做,但它没有像我想的那样工作。

sed -r -i 's/[0-9]{1}/0&/g' file.txt

2 个答案:

答案 0 :(得分:4)

$ sed -E 's/([[:digit:]]+)/000&/g;s/0+([[:digit:]]{4})/\1/g' file.txt
0002
0022
0222
2222
a0002a0002
0002a0002a
a0022a
0002aa0002
0022a0002

第一次替换会将000添加到该行中的每组数字。第二个替换从每组数字的开头删除零,直到只剩下四个数字。

第一次替换后的中间输出因此

$ sed -E 's/([[:digit:]]+)/000&/g' file.txt
0002
00022
000222
0002222
a0002a0002
0002a0002a
a00022a
0002aa0002
00022a0002

,第二次替换删除了额外的零。

答案 1 :(得分:3)

GNU awk 解决方案:

awk -v FPAT='[0-9]+|[^0-9]+' '{ 
           for (i=1;i<=NF;i++) printf ($i~/[0-9]/? "%04d":"%s"),$i; 
           print "" 
       }' file.txt

输出:

0002
0022
0222
2222
a0002a0002
0002a0002a
a0022a
0002aa0002
0022a0002