我正在编写一个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
答案 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