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

时间:2019-04-17 18:27:13

标签: bash shell grep tail

如何仅对文件的“尾部”执行grep?

我正在尝试运行以下命令:

grep 'TEST COMPLETE' -L *.log

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

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

tail *.log | grep 'TEST COMPLETE'

但是我不能使用-l-L参数,因为我现在正在抓取管道输入而不是文件。因此,使用list files参数运行它:

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

将仅输出:(standard input)

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

4 个答案:

答案 0 :(得分:6)

您可以仅在for循环中完成此操作:

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

答案 1 :(得分:2)

这应该有效:

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:-2)

tail -n10 FILENAME将为您提供文件的最后10行。然后,您可以按照问题中的说明将其发送到grep。