从 /var/log/messages 获取时间戳之间的一系列行

从 /var/log/messages 获取时间戳之间的一系列行

我想从 /var/log/messages 获取两个时间戳之间的所有行。我只有开始时间,将其提供给脚本作为输入。然后脚本应该让我得到第二天之前的所有行作为输出。我试过这个-

startDate=$1
toDate=`date -d "${startDate}+1day"`
sed -n '/${startDate}/ , /${toDate}/p' messages* 

$toDate但是,当在消息日志中找不到该模式时,我发现这种方法存在问题。所以我将代码修改为这样-

startDate=$1
toDate=`date -d "${startDate}+1day"`
until [ `grep -Fxq ${toDate} messages*` ];
do
    echo ${toDate}
    epoch=`date -d "${toDate}" +%s`
    new_epoch=$(($epoch+1))
    next_ts=`date -d "1970-01-01 ${new_epoch} sec"`
    toDate=${next_ts:4:15}
done
sed -n '/${startDate}/ , /${toDate}/p' messages* 

现在我很难匹配日志中的日期。对于我的输入Nov 6 07:17:04 UTC 2017,代码将下一个日期生成为Nov 7 07:17:04。请注意,消息日志中的实际时间戳在月份名称和单位日期之间包含两个空格。所以我无法匹配字符串。

有没有办法解决?我希望脚本也能处理两位数的日期(比如 10)。

相关内容