Use o GNU 'date' para isso. Ele também irá converter entre outros formatos para você (veja date --help
para a lista de formatos).
$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05
Eu tenho um problema com o meu formato de data. Eu quero mudar de um formato para o outro e vice-versa. Meus formatos de data são
Formato 1
YYYY-MM-DD
Formato 2
MM/DD/YYYY
Eu quero alterar o formato 1 para o formato 2 e o formato 2 para o formato 1.
Use o GNU 'date' para isso. Ele também irá converter entre outros formatos para você (veja date --help
para a lista de formatos).
$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05
Supondo que você tenha datas no formato de texto que precisam ser convertidas
echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'
e vice-versa
echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY
Se você tiver um arquivo com muitas dessas datas, uma por linha:
awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file
Usando o sed da seguinte forma:
$ echo '2013-12-13' | sed -r 's/([[:digit:]]{2,4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})/\/\//g'
12/13/2013
$ echo '12/13/2013' | sed -r 's/([[:digit:]]{1,2})\/([[:digit:]]{1,2})\/([[:digit:]]{2,4})/--/g'
2013-12-13
Tags text-processing date perl awk