입력하다:
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