在日期和时间之后检查模式

时间:2013-03-23 00:16:49

标签: shell logging pattern-matching

有日志文件中有模式

----- Fri Mar 22 20:11:50 2013
statement 1
statement 2
statement 3
.
.
.
No errors
statement 10
statement 11
statement 12

我需要搜索生成的当前日期和时间日志,并在日志文件中查找模式“No Errors”。我怎样才能做到这一点 ? 小注意:日志文件将包含多个日期日志条目。

我试过

 [ `grep -c "No Errors"  /usr/apps/logs/errrors.log` eq 1 ]
 echo "No error"

问题是它没有回应“No Error”,因为它可能在这里有多个匹配。那我该怎么办 在日志文件中确定某个检查时间和日期后找到一个模式?

谢谢!

2 个答案:

答案 0 :(得分:0)

在两个单独的命令中执行此操作。该命令的第一部分将打印任一日期的匹配或字符串“No errors”。第二部分将删除重复的相邻输出行,因此每个日期之间最多只打印一个“无错误”。

grep -ei '[0-9]:[0-9][0-9]:[0-9][0-9] 20[0-9][0-9]' -ei 'No errors' | uniq

您获得的输出将是日期列表,后面是日期后的“无错误”消息,如果在该日期之后以及包含在下一个日期之前的字符串“无错误”中出现任何错误日志文件。

我不确定您的文件是否包含“无错误”或“无错误”,因此请确保我的命令更新为您正在搜索的内容。此外,请确保更改命令,以便它从您正在使用的日志文件接收输入。例如,

cat logfile | grep -ei ......

答案 1 :(得分:0)

您可以使用awk之类的工具,您可以在其中定义记录分隔符和字段分隔符。我无法测试,因为你没有提供太多的样本输入,但是这样的东西可能会起作用:

awk -v RS='----- ' -v FS='\n' '/No errors/ {print "No errors on " $1}' logfile