入力する:
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