たとえば、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/'

スペースとコロンの間に 1 桁の数字が表示される場合は、ゼロが追加されます。分後にスペースを削除するには

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

答え2

コロンの前の数字を見つけて、前にゼロが付いた2桁の数字で印刷します。

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

関連情報