2

我可以使用以下命令搜索过去 10 天的日志文件:

find . -type f -mtime -10 |xargs grep -i -n 'exception' 2> /dev/null

但我想进一步限制搜索文件中在上午 6 点下午 6 点之间记录的行。我想知道如果这些行看起来像这样,我如何修改 grep 命令来过滤这些:

2012-09-04 03:50:41,658 [MainLogger: ] EXCEPTION  AppLog - some exception 1
2012-09-04 10:01:32,902 [MainLogger: ] EXCEPTION  AppLog - some exception 2
2012-09-04 15:39:51,901 [MainLogger: ] EXCEPTION  AppLog - some exception 3
2012-09-04 18:12:51,901 [MainLogger: ] EXCEPTION  AppLog - some exception 4

在上述情况下,应返回第 2 行和第 3 行,因为它们介于6am6pm之间。

任何帮助,将不胜感激

4

3 回答 3

2

一种简单的丑陋方法可能是添加很多 grep,如下所示:

find . -type f -mtime -10 |xargs grep -i -n 'exception' | grep -v " 00" | grep -v " 01" | ... | grep -v " 18" | grep -v " 19" ... 2> /dev/null

或更简洁地说:

find . -type f -mtime -10 |xargs grep -i -n 'exception' | grep -v -e " \(0[012345]\|18\|19\|2[0123]\)" 2> /dev/null
于 2012-09-04T16:23:05.983 回答
1

你可以像这样破解它:

grep ' 0[6789]:\| 1[01234567]\| 18:00:00,000'

但如果您需要更多时间处理,我建议切换到更强大的语言(例如 Perl 和DateTime)。

于 2012-09-04T16:22:37.907 回答
0

在具有适当日期时间库的任何语言中,将所有日期转换为规范表示会使问题变得微不足道。默认的规范化是转换为自 1970 年 1 月 1 日午夜以来的秒数。然后只需查看输入行的规范数字是否大于开始时间且小于结束时间。

于 2012-09-04T17:55:28.943 回答