Разбор даты и проверка того, как недавно это произошло в Bash - PullRequest
1 голос
/ 01 октября 2011

Я работаю над сценарием Bash (использующим Cygwin), который использует cURL для очистки веб-страницы и проверки определенного значения даты.Мои вызовы cURL и grep приводят к следующей строке:

<span style="float:right">Last Update: 9/30/2011 3:16:31 AM</span><p>

Что мне нужно сделать с датой, так это проверить, что она в течение последних n дней.Как лучше всего подойти к этому и как мне разобрать дату?

Ответы [ 3 ]

2 голосов
/ 01 октября 2011

Что-то вроде:

DATESTRING="$(sed -e 's/.*Last Update: \([^<]*\)<.*/\1/' $MYINPUT)"
UPDATE=$(date -d "$DATESTRING" +%s) 
EPOCH=$(date -d "-$n days" +%s)
test "$UPDATE" -ge "$EPOCH" && echo "It's new!"
1 голос
/ 01 октября 2011

Программа 'date' должна иметь возможность анализировать этот формат даты.Например:

% date -d '9/30/2011 3:16:31 AM'
Fri Sep 30 03:16:31 PDT 2011

Итак, вы можете использовать 'date', чтобы преобразовать это в что-то пригодное для использования в bash (целое число, секунды с начала эпохи):

parseddate=$(something that extracts just the date from the line ...)
date -d "$parseddate" +%s

Затем сравните эток результату

date -d '3 days ago' +%s
0 голосов
/ 01 октября 2011

Я бы сказал, что самый лучший способ - это проанализировать его на другом языке, например, на Perl, поскольку разобрать дату будет проще. Если вы предпочитаете использовать Bash, отметьте опцию --date в man date.

...