使用Find/Grep在一天中的特定时间之间搜索文件



我可以使用以下命令搜索过去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行应返回,因为它们位于早上6点至下午6点之间。

任何帮助都将不胜感激

一个简单的丑陋的方法可以添加很多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

你可以这样破解它:

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

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

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

最新更新