我想从 /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)。