查看昨天/今天的日志



我正在寻找一种方法,将过去两天的多个日志文件查看到一次中。

起初,我尝试了GREP:

#!/bin/bash
yesterday=$(date --date="yesterday" +"%Y-%m-%d")
today=$(date +"%Y-%m-%d")
grep "$yesterday|$today" *.log | less

这很好,但它不会输出匹配之间的行(没有日期的行,比如错误堆栈跟踪——这是我真正感兴趣的)。。。

所以我发现了这个:

#!/bin/bash
yesterday=$(date --date="yesterday" +"%Y-%m-%d")
sed -ne '/$yesterday/,$p' *.log | less

对于每个文件,它输出从第一个匹配到文件末尾的所有内容。太完美了。。。除了一件事。。。当我读它的时候,我不知道我在看哪个文件的内容。我想在每行的开头看到文件名,就像grep一样。

  • 如何在sed命令的每一行前面加上文件名的前缀
  • 有更好的方法吗

谢谢;-)

不是sed解决方案,但正如您所要求的,有一种更好的方法来实现这一点。。。如果你在某个地方有GNU漏洞,

awk -v day="$yesterday" 'BEGINFILE {run=0} $0 ~ day {run=1} run == 1 {print FILENAME, $0}' *.log

应该成功。

解释:

GNU awk按顺序处理所有文件。GNU awk变量day被初始化为外壳表达式"$yesterday" GNU awk在处理新文件之前执行BEGINFILE规则。此规则清除run变量。每当一行($0)与GNU awk变量day"$yesterday")匹配时,就会设置run变量。当设置了run变量时,将打印当前文件的名称(FILENAME),然后是当前行($0)。

最新更新