正在 grep 的文件的实时尾部 (tail -f)

正在 grep 的文件的实时尾部 (tail -f)

我可以实时tail -f -n20 <file>查看文件的最后 20 行。

如果我想 grep 某些东西 tail -f <file> | grep <pattern>,它仍然是活动的,但只会通过 tail 的输出进行 grep,这意味着我一开始并没有 20 行输出。 (如果 20 行中只有 5 行符合我的模式,那么我只能从输出中得到 5 行)

如果我做类似的事情

grep <pattern> <file> | tail -n20 

我有 20 行输出,但它不是实时的,也不是

cat <file> | grep <pattern> | tail -n20

如何查看文件最后 n 行的实时更新格雷普?

答案1

您可以tee与进程替换一起使用>()

tail -f -n 20 file.log | tee >(grep 'pattern')

这将显示 的最后 20 行file.log,然后显示 的结果grep

答案2

请注意,在 中tail -fn2020only 从一开始就起作用。

tail将显示前 20 行,然后继续显示全部新行一出现就添加(无论是 1 行、20 行还是 1000 行)。

或者换句话说,tail -fn20就像tail -n20后面跟着tail -fn+1

在这里,你可以这样做:

{ grep pattern | tail -n 20; tail -fn+1 | grep pattern; } < file

也就是说,手动执行第一步,然后tail -f显示其余所有步骤。

相关内容