尾“在最后一小时从日志文件中写入的行”是否可能?

RRR*_*CCC 7 command-line log

我正在尝试 grep 在日志文件中查找模式,但我需要日志文件的最后一个小时。tail -n XX 将不起作用。有谁知道这是否可能?某种尾部“在最后一小时从日志文件中写入的行”

如果有任何命令或程序,我很感激。

非常感谢

pa4*_*080 12

假设您的日志具有以下结构:

219.369.42.449 - - [05/Mar/2020:11:05:17 +0200] "log line"
219.369.42.449 - - [05/Mar/2020:11:06:37 +0200] "log line"
219.369.42.449 - - [05/Mar/2020:12:01:14 +0200] "log line"
219.369.42.449 - - [05/Mar/2020:12:07:23 +0200] "log line"
Run Code Online (Sandbox Code Playgroud)

我们可以通过以下方式获取从第一次出现05/Mar/2020:11$文件末尾的所有行sed

sed -n '/05\/Mar\/2020:11/,$p' "/path/to/file.log"
Run Code Online (Sandbox Code Playgroud)
  • 该选项-n将抑制 的正常输出sed,但该标志p将打印文件的匹配部分。

  • 请注意,如果没有出现任何符合 的记录05/Mar/2020:11,则sed不会提供任何输出。

我们可以在命令的帮助下自动执行上述操作,date并且eval

COMMAND="sed -n '/$(LANG=C date --date='1 hour ago' "+%d\/%b\/%Y:%H")/,\$p'"
eval $COMMAND \"/path/to/file.log\"
Run Code Online (Sandbox Code Playgroud)
  • sed在这种情况下,在表达式中使用双引号和变量不会提供所需的输出。
  • 因此,我们首先将命令构造为字符串,然后通过 将其转换为真正的命令eval
  • LANG=C( LANG=en_us_88591) 代表获取所需的日期格式,因为例如,在我的情况下,此 envvar 的默认值是bg_BG.UTF-8.

您可以根据上面的两行创建一个脚本 - 此类脚本的示例: