Answers:
egrep '^[^ ]+ (0[89]|1[0-9]|2[012]):'
详细解释可以在各种正则表达式(正则表达式)教程中找到; egrep
使用“POSIX扩展”语法(man 7 regex
)。
第一个^
意思是“开始行”。
[^ ]+
只是匹配日期字段,无论实际日期如何。
[...]
意思是“括号之间的任何字符”,因此[89]
匹配任何一个8
或9
; [0-9]
是任何数字,除了空格之外的[^ ]
任何东西(因为括号内)。^
+
指“一个或多个先前的”(例如,a+
将匹配a
,aaa
和aaaaaaaa
)。
因此,^[^ ]+
将从行的开头开始,并尽可能多地匹配非空格字符。
(...|...|...)
表示“给定模式中的任何一个”,因此(0[89]|1[0-9]|2[012])
表示“ 0[89]
或者1[0-9]
或2[012]
”。它将匹配08到22之间的所有数字。
一个更好的选择是:
awk -F'[: ]' '$2 >= 8 && $2 <= 22 { print }'
该-F
选项根据[: ]
正则表达式(匹配任一:
或空格)将每一行拆分为单独的字段,并且awk脚本检查第二列(小时)。
为什么要使用grep呢?你可以简单地使用sed。
例:
sed -n '/Jun 17 13:39:54/ , /Jun 18 10:50:28/p' kern.log
这将打印June 17 13:39:54
和之间的所有日志June 18 10:50:28
实际上有一种更简单的方法。
下载/文档: autodrgrep.kl.sh
命令:
./autodrgrep.kl.sh notchef /tmp/client.log '2016-05-08_08:00:00,2016-05-08_23:00:00' 'INFO' 'a2ensite' 5 10 -show
说明:
autodrgrep.kl.sh是工具名称。
notchef是一个传递给工具的选项,告诉它该做什么。在这种特殊情况下,它告诉工具什么类型的日志文件/tmp/client.log。
/tmp/client.log当然是日志文件。
2016-05-08_19:12:00,2016-05-08_21:13:00是您希望扫描的日志中的日期范围
“INFO”是您感兴趣的日志行中的字符串之一。
“a2ensite”是您希望在其上找到“INFO”字符串的同一行上的另一个字符串。指定这两个字符串(INFO和a2ensite)可以更快地隔离和处理您想要的行,特别是在您处理大量日志文件时。
5指定警告。通过指定5,如果您指定的搜索字符串至少出现5次,则告诉程序警告为WARNING
10指定严重。通过指定10,如果您指定的搜索字符串至少出现10次,则告诉程序警告为CRITICAL。
-show指定您将获得什么类型的响应。通过指定-shown,您将说明是否找到与指定模式匹配的内容,并将其输出到屏幕。
样品运行:
# ./autodrgrep.kl.sh notchef /tmp/client.log '2016-05-08_19:12:00,2016-05-08_21:13:00' 'INFO' 'a2ensite' 5 10 -show
[2016-05-08 19:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:13:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 19:42:57-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:42:57-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:42:57-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:43:08-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:43:11-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:13:10-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:42:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:42:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:42:59-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:43:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:43:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 21:12:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 21:12:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 21:12:59-07:00] INFO: execute[a2ensite default] ran successfully
23
2---78720---23---ATWFILF---(2016-05-08)-(19:12)---(2016-05-08)-(21:13) SEAGM
如果用户指定的日期范围或时间范围不在日志中,该怎么办?
上述命令的每次运行总是有一行(输出的最后一行),表示“ATWFILF”或“ETWNFILF”。
ATWFILF表示您在日志中找到了您请求搜索的实际日期范围或时间范围。所以这非常好。
ETWNFILF表示在日志中找不到您请求搜索的实际日期范围或时间范围。在这种情况下,将检测并使用指定时间的最近时间。
^[^ ]+
部分..