最后一小时的Grep消息

时间:2016-06-27 12:50:16

标签: bash grep

我有一个以这种格式发出日志的应用程序:

00:00:10,799 ERROR [stderr] (http-prfilrjb08/10.1.29.34:8180-9)     {}:return code:  500

我需要监视日志文件中的新ERROR,这是在过去一小时内发生的。看一些教程,我想出了以下grep:

 grep "^$(date -d -1 hour +'%H:%M:%S')" /space/log/server.log  | grep 'ERROR'

然而没有任何东西被掠过!你能帮我解决一下吗? 谢谢!

2 个答案:

答案 0 :(得分:4)

您需要-1 hour周围的引号,并且还要从输出中删除秒和分钟(您当前的解决方案仅在1小时前的第一秒找到数据):

grep "^$(date -d '-1 hour' +'%H')" /space/log/server.log  | grep 'ERROR'

答案 1 :(得分:2)

grep -E "^($(date -d '-1 hour' '+%H')|$(date '+%H')):[0-9]{2}:[0-9]{2}" /space/log/server.log | grep 'ERROR'

让我们来看看部分

grep -E告诉grep使用扩展正则表达式(所以我们不需要转义所有这些括号)

date -d '-1 hour' '+%H'打印前一个小时。同样date '+%H'打印当前小时。这些需要在运行时进行评估并在捕获组中捕获,这就是我们拥有(date|date)结构的原因(您可能不仅需要前一小时的某些数据,而且还需要当前运行小时的数据)。

接下来,您需要指定您确实在查看时间戳。我们使用:来分隔小时,分钟和秒。一个两位数的数字组可以与[0-9]{2}正则表达式匹配(这与[0-9][0-9]基本相同但更短)

你去。

聚苯乙烯。我推荐sed。

相关问题