Como fazer de 1:52 a 01:52 com ex .: sed?

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 ..:)

    
por gasko peter 04.06.2013 / 09:05

4 respostas

1
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/'
    
por 04.06.2013 / 09:35
1

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|/'
    
por 04.06.2013 / 09:37
0

Isso pode funcionar para você (GNU sed):

sed 's/\b[0-9]:/0&/' file
    
por 10.06.2013 / 22:53
0

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
    
por 27.10.2013 / 11:30

Tags