Grep 包含一系列数据的行的文件名范围



假设我在一个目录中有日志文件,带有日期文件名,例如201401222014012320140124等。

在这些日志文件中,每次我发布到日志文件时,我都有一个日期时间字符串,后跟数据,例如:

Thu Jan 23 02:04:48 EST 2014
bbb:Encryption of file: bbb has finished.

我想做的是 grep 以短语开头的行, bbb: ,在某个时间范围内,例如 01:00:00 - 03:00:00 并在与日期范围(例如 20140122-20140124)匹配的文件中找到日期时间。

在此示例中,理想情况下,grep将返回上述两行,以及与凌晨 1 点到 3 点之间时间条件匹配并以 bbb 开头的任何其他行:

有什么建议吗?

编辑:我决定从文件系统更改为数据库系统,所以虽然我仍然想找到答案,但对于有一天可能需要类似东西的其他人,如果你愿意,这个问题现在可以关闭。

似乎对我有用:

for file in 2014012{2..4}
do
  echo
  echo "<<<<-" $file "->>>>"
  grep --no-group-separator -B1 -e '^bbb:' $file | 
    awk '$4>="01:00:00" && $4<="03:00:00"{print $0;getline;print $0}'
done

我认为,你应该把你的问题分成几个不太复杂的部分。"如何获取名称在范围内的文件","如何获取文件的grep内容"等。

抱歉,我不明白您对 grep 有什么抱怨,但您可以像这样找到您的文件。

mkdir a{1,2,3,4,5,6,7}; ls | sort -n | sed -n '/a3/,/a6/p'; rm -r a{1,2,3,4,5,6,7}

它创建示例目录,获取目录列表,将文件名排序为数字,获取 a3 和 a6 之间的字符串并清除所有内容。

而且,是的,您应该确保具有您的日期名称的文件存在,如果没有,则获取最接近的文件。这可能是您另一个单独的问题,如何做到这一点。

相关内容

  • 没有找到相关文章

最新更新