小智 1260
grep
使用BSD grep(FreeBSD,Mac OS X等)时打开线路缓冲模式
tail -f file | grep --line-buffered my_pattern
Run Code Online (Sandbox Code Playgroud)
你不需要为GNU grep(在几乎任何Linux上使用)执行此操作,因为它将默认刷新(对于其他类似Unix的喜欢,例如SmartOS,AIX或QNX).
Iri*_*iel 115
我tail -f <file> | grep <pattern>
一直都在使用.
它将等到grep刷新,直到它完成(我正在使用Ubuntu).
XzK*_*Kto 60
我认为你的问题是grep使用了一些输出缓冲.尝试
tail -f file | stdbuf -o0 grep my_pattern
Run Code Online (Sandbox Code Playgroud)
它会将grep的输出缓冲模式设置为unbuffered.
Ken*_*ams 11
如果你想在整个文件中找到匹配项(而不仅仅是尾部),并且你希望它能够等待任何新的匹配,那么这很有效:
tail -c +0 -f <file> | grep --line-buffered <pattern>
Run Code Online (Sandbox Code Playgroud)
该-c +0
标志表示输出应该从文件的开头()开始0
bytes(-c
)+
.
Dal*_*son 10
在大多数情况下,你可以tail -f /var/log/some.log |grep foo
,它会工作得很好.
如果你需要在正在运行的日志文件中使用多个greps而你发现没有输出,你可能需要将--line-buffered
开关粘在你的中间 grep(s)上,如下所示:
tail -f /var/log/some.log | grep --line-buffered foo | grep bar
Run Code Online (Sandbox Code Playgroud)
meb*_*ada 10
您可以将此答案视为增强功能..通常我正在使用
tail -F <fileName> | grep --line-buffered <pattern> -A 3 -B 5
Run Code Online (Sandbox Code Playgroud)
-F 在文件旋转的情况下更好(如果文件旋转,-f 将无法正常工作)
-A 和 -B 可用于在模式出现之前和之后获取行.. 这些块将出现在虚线分隔符之间
但对我来说,我更喜欢做以下事情
tail -F <file> | less
Run Code Online (Sandbox Code Playgroud)
如果您想在流式日志中进行搜索,这将非常有用。我的意思是来回深入地看
小智 6
没看到有人为此提供我通常的建议:
less +F <file>
ctrl + c
/<search term>
<enter>
shift + f
Run Code Online (Sandbox Code Playgroud)
我更喜欢这样做,因为您可以使用它ctrl + c
随时停止和浏览文件,然后单击shift + f
以返回实时流式搜索。
归档时间: |
|
查看次数: |
300353 次 |
最近记录: |