我正在寻找一种方法,可以将过去两天的多个日志文件一次性查看。
起初,我尝试过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一样。
谢谢; - )
答案 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
)。