Mam jeden problem z formatem daty. Chcę zmienić z jednego formatu na drugi i odwrotnie. Moje formaty dat to
Format 1
YYYY-MM-DD
Format 2
MM/DD/YYYY
Chcę zmienić format 1 na format 2 i format 2 na format 1.
Mam jeden problem z formatem daty. Chcę zmienić z jednego formatu na drugi i odwrotnie. Moje formaty dat to
Format 1
YYYY-MM-DD
Format 2
MM/DD/YYYY
Chcę zmienić format 1 na format 2 i format 2 na format 1.
Odpowiedzi:
Użyj do tego „daty” GNU. Konwertuje również inne formaty dla ciebie (zobacz date --helplistę formatów).
$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05
Zakładając, że masz daty w formie tekstowej, które należy przekonwertować
echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'
I wzajemnie
echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'
datepodejściem drewbenna , które z pewnością jest bardziej eleganckie
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY
Jeśli masz plik z wieloma datami, po jednym w wierszu:
awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file
Używając sed w następujący sposób:
$ echo '2013-12-13' | sed -r 's/([[:digit:]]{2,4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})/\2\/\3\/\1/g'
12/13/2013
$ echo '12/13/2013' | sed -r 's/([[:digit:]]{1,2})\/([[:digit:]]{1,2})\/([[:digit:]]{2,4})/\3-\1-\2/g'
2013-12-13
Odpowiadając na wyjaśnione pytanie w komentarzach na temat zmiany formatu daty w nazwie pliku, skorzystaj z wariantu gnu datepodejścia Drawbenna . To polecenie znajduje wszystkie pliki w folderze lokalnym i przesyła do nazwy tylko nazwę pliku xargs, zastępując datezmodyfikowaną nazwę pliku drugim argumentem, na mvktóry wykonuje się zmiana nazwy.
Dodatkowe, nieco okrężne stosowanie bashzmiennego podstawiania jest konieczne podczas bashoceny datepolecenia.
find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1 $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;