解析日期并检查它在Bash中的最近状态

时间:2011-09-30 20:50:43

标签: regex bash shell cygwin

我正在使用一个Bash脚本(使用Cygwin),该脚本使用cURL来抓取网页并检查某个日期值。我的cURL和grep调用导致以下行:

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

我需要对日期做的是检查它是否在最近n天内。处理此问题的最佳方法是什么,我应该如何解析日期?

3 个答案:

答案 0 :(得分:2)

类似的东西:

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 :(得分:1)

'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

答案 2 :(得分:0)

我想说绝对最好的方法是使用另一种语言解析它,例如Perl,因为解析日期会更容易。如果您更愿意使用Bash,请查看--date中的man date选项。