查看昨天/今天的日志

时间:2015-10-28 09:00:03

标签: linux bash sed grep sh

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

起初,我尝试过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命令中为每行添加文件名前缀?
  • 有更好/更好的方法吗?

谢谢; - )

1 个答案:

答案 0 :(得分:1)

不是sed解决方案,而是因为您要求更好/更好的方法来执行此操作 ...如果您在某处有GNU awk,

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

应该成功。

<强>解释

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