2017-10-05 8 views
0

한 자리, 두 자리 및 세 자리 숫자를 0으로 채우는 bash 스크립트를 프로그래밍하고 있습니다.sed가있는 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

@EdMorton, 읽기 쉽도록 만들어졌습니다 * 읽기가 더 빨라짐) – 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 라인 자릿수마다 그룹. 두 번째 대체는 네 자리 만 남을 때까지 모든 숫자 그룹의 시작 부분에서 0을 제거합니다.

제 교체 후의 중간 출력 따라서

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

이고 제 교체는 여분의 제로를 제거한다.