У мене є одна проблема з форматом дати. Я хочу перейти від одного формату до іншого і навпаки. Мої формати дати є
Формат 1
YYYY-MM-DD
Формат 2
MM/DD/YYYY
Я хочу змінити формат 1 на формат 2 і формат 2 на формат 1.
У мене є одна проблема з форматом дати. Я хочу перейти від одного формату до іншого і навпаки. Мої формати дати є
Формат 1
YYYY-MM-DD
Формат 2
MM/DD/YYYY
Я хочу змінити формат 1 на формат 2 і формат 2 на формат 1.
Відповіді:
Використовуйте для цього «дату» GNU. Він також конвертуватиме між вами інші формати (див date --help
. Список форматів).
$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05
Припустимо, що у вас є дати у текстовій формі, які потрібно перетворити
echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'
І навпаки
echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'
date
, що, безумовно, більш елегантно
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY
Якщо у вас є файл із великою кількістю цих дат, по одному на рядок:
awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file
Використання sed наступним чином:
$ 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
Відповідаючи на уточнене запитання у коментарях про те, як змінити формат дати у назві файлу, використовуйте варіант gnu date
підходу drewbenn . Ця команда знаходить всі файли в локальній папці і передає лише ім'я файлу xargs
, замінюючи date
змінене ім'я файлу як другий аргумент, mv
якому виконується перейменування.
Додаткове, злегка контурне використання bash
змінної підстановки необхідне при bash
оцінці date
команди.
find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1 $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;