如何仅对文件的“尾部”执行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行或类似的内容上进行搜索?
答案 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。