如何仅对文件的“尾部”执行grep?
我正在尝试运行此命令:
grep 'TEST COMPLETE' -L *.log
测试完成出现在最后几行中,此命令列出了文件夹中尚未完成测试的所有文件(由于-L
)。但是日志非常大,所以grep
非常慢。
另一方面,我可以在尾部使用grep。grep几乎是即时的:
tail *.log | grep 'TEST COMPLETE'
但是,我不能使用-l
或-L
参数,因为我现在处理的是管道输入,而不是文件。因此,使用list files参数运行它:
tail *.log | grep 'TEST COMPLETE' -L
将只输出:(standard input)
有没有什么方法可以让grep
搜索最后10行或类似的东西?
发布于 2019-04-17 18:33:32
你可以在一个for
循环中做到这一点:
for log in *.log; do
if ! tail "$log" | grep -q 'TEST COMPLETE'; then
echo "$log"
fi
done
发布于 2019-04-17 18:33:22
这应该是可行的:
for f in *.log; do tail "$f" | grep -q 'TEST COMPLETE' || echo "$f"; done
发布于 2019-04-17 21:45:30
假设tail *.log
将==> filename <==
放在每个文件之间,并且该字符串不会出现在任何文件中:
tail *.log |
awk 'gsub(/^==> | <==$/,""){if (f) print f; f=""} /TEST COMPLETE/{f=FILENAME} END{if (f) print f}'
https://stackoverflow.com/questions/55733878
复制相似问题