我可以使用以下命令搜索过去10天内的日志文件:
find . -type f -mtime -10 |xargs grep -i -n 'exception' 2> /dev/null
但我想进一步限制搜索文件中 6am 和 6pm 之间记录的行。我想知道如果行如下所示我可以修改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行,因为它们介于 6am 和 6pm 之间。
任何帮助将不胜感激
答案 0 :(得分:2)
一种简单的丑陋方式可以添加很多greps,如下所示:
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
答案 1 :(得分:1)
你可以像这样破解:
grep ' 0[6789]:\| 1[01234567]\| 18:00:00,000'
但如果您需要更多时间处理,我建议您切换到更强大的语言(例如Perl和DateTime)。
答案 2 :(得分:0)
在具有正确日期时间库的任何语言中,将所有日期转换为规范表示会使问题变得微不足道。默认规范化是从1970年1月1日午夜开始转换为秒。然后只看输入行的规范数字是否大于开始时间且小于结束时间。