1

我正在编写一个用零填充一位、两位和三位数字的 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
4

2 回答 2

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

第二个替换删除了多余的零。

于 2017-10-05T16:43:24.000 回答
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
于 2017-10-05T16:22:26.343 回答