2011-12-24 2 views
1

Дата на второй строке файла выглядит следующим образомДата преобразования не работает

12-24-11 13:37 (MM-YY-YY MM:SS)

Я хочу, чтобы преобразовать его в

Sat Dec 24 13:37:00 CET 2011

секунд всегда должен быть 00.

Я делаю это с помощью этого кода

date="$(sed -n 2p $file)" 
date="$(echo $date | sed 's#^\([0-9\-]\{5\}\)-\([0-9]\{2\}\)#\2-\1#')" 
date="$(date -d $date)" 

Но неизвестных причин мне это не работает ... Есть идеи?

Я всегда получаю ошибку:

date: the argument '13:37' lacks a leading '+';
When using an option to specify date(s), any non-option
argument must be a format string beginning with '+'.

ответ

0

Это может работать для вас:

date=$(sed -n '2s/\(.*\)-\(..\) /date -d \2-\1\\ /p' file | sh) 

Или, если вы используете GNU СЭД:

date=$(sed -n '2s/\(.*\)-\(..\) /date -d \2-\1\\ /ep' file) 
2

Похоже, вы отправляете 12-24-11 13:37, но вы должны избежать пробелов: 12-24-11\ 13:37 или "12-24-11 13:37", чтобы предотвратить его интерпретировать его как два аргумента.

+0

Но когда я делаю это вручную из командной строки, то она работает с пространствами ... $ date -d '11 -12-24 13:37 ' –

+0

Точно, вы используете '' ', чтобы избежать их. –

+0

И как мне изменить код? date = "$ (date -d \ '$ date \), очевидно, не является решением вообще: D –

Смежные вопросы