sed -e 's/ \([0-9]:\)/ 0/'
adiciona um zero se um único dígito ocorrer entre um espaço e dois-pontos. Se você também quiser se livrar do espaço após os minutos, é
sed -e 's/ \([0-9]:[0-9][0-9]\) / 0/'
ENTRADA:
a|2013.06.13. 13:22|xx
b|2013.06.13. 1:52 |xx
c|2013.06.13. 2:26 |xx
OUTPUT:
a|2013.06.13. 13:22|xx
b|2013.06.13. 01:52 |xx
c|2013.06.13. 02:26 |xx
Como posso fazer o 1:52 para o 01:52 neste caso?
ATUALIZAÇÃO: Obrigado! Estes estão funcionando muito bem, mas como posso remover o espaço entre os minutos e o "|" se 0 foram adicionados?
$ sed -e 's/ \([0-9]:\)/ 0/' 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
$
uau ..:)
Encontre o número antes do cólon e imprima-o como dois dígitos com o zero:
perl -wpe 's/(\d+):/sprintf("%02d:",$1)/e'
Para corrigir o problema de espaço, você pode estender a expressão um pouco:
perl -wpe 's/(\d+):(\d+) +\|/sprintf("%02d:%02d|",$1,$2)/e'
Ou se você quiser corresponder exatamente ao seu caso:
perl -wpe 's/ (\d:\d\d) \|/ 0$1|/'
Isso pode funcionar para você (GNU sed):
sed 's/\b[0-9]:/0&/' file
versão não 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