2017-10-05 27 views
0

私は1桁、2桁、3桁の数字に0をつけたbashスクリプトをプログラミングしています。たとえば:パッド1桁、2桁、3桁の数字に0を付けた

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

「私はsedコマンドでそれをしなければならない」 - なぜ? sedは仕事のために完全に間違ったツールです。そのようなことは、ドライバーだけで木を植えなければならないと言っています。 –

+0

この質問は一週間に一度お願いします –

答えて

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 
+2

@ Mr.Kevin、幸運 – RomanPerekhrest

+1

@エドモートン、読みやすさを実証して*読みやすくする* – RomanPerekhrest

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

最初の置換は、行の桁のグループごとに000を付加します。 2番目の置換は、4桁の数字だけが残るまで、すべての桁グループの先頭からゼロを削除します。

第1の置換後の中間出力は、このよう

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

であり、第2の置換は、余分なゼロを削除します。

関連する問題