Answers:
添加--line-buffered
到grep
,这可能会减少延迟。在某些情况下非常有用。
tail -f foo | grep --line-buffered bar
grep
不发送到终端(重定向到另一种文件)时,这很有用。输出到终端时,行缓冲是默认设置,因此在那里没有任何区别。请注意,该选项是特定于GNU的。
您可以将的输出通过管道传递grep
到tail -f
。也有结合方案tail -f
与滤波和着色,特别是功能性multitail(实施例)。
我看到所有这些人都说要使用tail -f
,但是我不喜欢这样的限制!我最喜欢的在搜索文件的同时还要监视新行的方法(例如,我通常使用日志文件,该文件附加了通过cron作业定期执行的进程的重定向输出):
tail -Fn+0 /path/to/file|grep searchterm
假设使用GNU tail和grep。尾页帮助页面中的支持详细信息(GNU coreutils,我的版本是v8.22)[ https://www.gnu.org/software/coreutils/manual/coreutils.html]:
-F same as --follow=name --retry -n, --lines=K output the last K lines, instead of the last 10; or use -n +K to output starting with the Kth. If the first character of K (the number of bytes or lines) is a '+', print beginning with the Kth item from the start of each file, otherwise, print the last K items in the file. K may have a multiplier suffix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y. With --follow (-f), tail defaults to following the file descriptor, which means that even if a tail'ed file is renamed, tail will continue to track its end. This default behavior is not desirable when you really want to track the actual name of the file, not the file descriptor (e.g., log rotation). Use --follow=name in that case. That causes tail to track the named file in a way that accommodates renaming, removal and creation.
因此,我命令的尾部等于tail --follow --retry --lines=+0
,其中final参数将其从开头开始,跳过零行。
tail -f access | awk '/ADD/{print $0}'
使用以上,我通常使用它。
有用。但是请注意,输出不再是瞬时的:它通过管道进行缓冲。
tail -f
在一个窗口中运行,在另一个窗口中运行tail -f logfile | grep pattern
。包含的pattern
行并非总是同时出现在两个窗口中。我已经看到,在极少数情况下,行距相隔30秒,这很烦人。
tee
还是什么。