예를 들어 sed를 사용하여 1:52를 01:52로 변경하는 방법은 무엇입니까?

예를 들어 sed를 사용하여 1:52를 01:52로 변경하는 방법은 무엇입니까?

입력하다:

a|2013.06.13. 13:22|xx
b|2013.06.13. 1:52 |xx
c|2013.06.13. 2:26 |xx

산출:

a|2013.06.13. 13:22|xx
b|2013.06.13. 01:52 |xx
c|2013.06.13. 02:26 |xx

이 경우 1:52를 01:52로 만드는 방법은 무엇입니까?

업데이트: 감사합니다! 이것들은 훌륭하게 작동하지만 분과 "|" 사이의 공백을 어떻게 제거할 수 있습니까? 0을 더하면 어떻게 될까요?

$ sed -e 's/ \([0-9]:\)/ 0\1/' b.txt 
a|2013.06.13. 13:22|xx
b|2013.06.13. 01:52 |xx
c|2013.06.13. 02:26 |xx
$ perl -wpe 's/(\d+):/sprintf( "%02d:",$1)/e' b.txt 
a|2013.06.13. 13:22|xx
b|2013.06.13. 01:52 |xx
c|2013.06.13. 02:26 |xx
$ 

우와.. :)

답변1

sed -e 's/ \([0-9]:\)/ 0\1/'

공백과 콜론 사이에 한 자리 숫자가 나타나면 0이 추가됩니다. 분 후에도 공간을 제거하려면

sed -e 's/ \([0-9]:[0-9][0-9]\) / 0\1/'

답변2

콜론 앞의 숫자를 찾아 앞에 0이 붙은 두 자리 숫자로 인쇄합니다.

perl -wpe 's/(\d+):/sprintf("%02d:",$1)/e'

공간 문제를 해결하려면 표현식을 약간 확장하면 됩니다.

perl -wpe 's/(\d+):(\d+) +\|/sprintf("%02d:%02d|",$1,$2)/e'

또는 귀하의 경우에 정확히 일치하는 것을 원하는 경우:

perl -wpe 's/ (\d:\d\d) \|/ 0$1|/'

답변3

이것은 당신에게 도움이 될 수 있습니다 (GNU sed):

sed 's/\b[0-9]:/0&/' file

답변4

sed가 아닌 버전:

$ cat sample.txt 
a|2013.06.13. 13:22|xx
b|2013.06.13. 1:52 |xx
c|2013.06.13. 2:26 |xx
c|2013.06.13. 2:6 |xx
$ while read l; do
>   IFS=" |:" read -a array <<< "$l"
>   printf "%s|%s %02s:%02s|%s\n" ${array[0]} ${array[1]} ${array[2]} ${array[3]} ${array[4]}
> done < sample.txt
a|2013.06.13. 13:22|xx
b|2013.06.13. 01:52|xx
c|2013.06.13. 02:26|xx
c|2013.06.13. 02:06|xx

관련 정보