使用 grep 命令但仅用于文件的最后几行?

Use grep command but only for the last lines of a file?

如何仅对文件的 'tail' 执行 grep?

我正在尝试 运行 这个命令:

grep 'TEST COMPLETE' -L *.log

TEST COMPLETE 出现在最后几行,此命令列出了文件夹中所有尚未完成测试的文件(因为 -L)。日志非常大,所以 grep 非常慢。

另一方面,我可以在尾部用管道传递 grep。 grep 几乎是即时的:

tail *.log | grep 'TEST COMPLETE'

但是我不能使用 -l-L 参数,因为我现在正在 grep 管道输入而不是文件。所以 运行 将它与列表文件参数结合起来:

tail *.log | grep 'TEST COMPLETE' -L

只会输出:(standard input)

有什么方法可以让 grep 搜索最后 10 行或类似的内容?

tail -n10 FILENAME 将为您提供文件的最后 10 行。然后,您可以按照您的问题将其通过管道传输到 grep 中。

这应该有效:

for f in *.log; do  tail "$f" | grep -q 'TEST COMPLETE' || echo "$f"; done

您可以在 for 循环中完成:

for log in *.log; do
   if ! tail "$log" | grep -q 'TEST COMPLETE'; then
      echo "$log"
   fi
done

假设 tail *.log 在每个文件之间放置 ==> filename <== 并且该字符串不会出现在任何文件中:

tail *.log |
awk 'gsub(/^==> | <==$/,""){if (f) print f; f=""} /TEST COMPLETE/{f=FILENAME} END{if (f) print f}'