Mik*_*ike 40 cygwin bash grep logging
作为我上一篇文章的延续,我曾经在那里grep & tail -f找到“罕见”事件的发生。我想把它记录在另一个文件中。
我试过转
tail -f log.txt | egrep 'WARN|ERROR'
Run Code Online (Sandbox Code Playgroud)
进入
tail -f log.txt | egrep 'WARN|ERROR' | tee filtered_output.txt
Run Code Online (Sandbox Code Playgroud)
该文件已创建,但没有填充任何内容,这是缓存问题还是其他问题?我如何将尾部的输出实时附加到新文件中?
nik*_*nik 49
缓冲是问题。
这样做,
tail -f log.txt | egrep --line-buffered 'WARN|ERROR' | 三通filtered_output.txt #^^^^^^^^^^^^^^^^
确认也可以在 Cygwin 上工作。
这可能是一个缓冲问题。请参阅有关在使用管道时禁用自动缓冲的 SO 帖子。您可以使用以下unbuffer命令expect:
$ unbuffer tail -f log.txt | egrep 'WARN|ERROR' | tee filtered_output.txt
Run Code Online (Sandbox Code Playgroud)
编辑:由于您有更长的管道,您可能需要取消缓冲每个命令(最后一个除外):
$ unbuffer tail -f log.txt | unbuffer egrep 'WARN|ERROR' | tee filtered_output.txt
Run Code Online (Sandbox Code Playgroud)
编辑 2:unbuffer在 Cygwin 上可以从expect源包中获得(例如,在文件夹中找到expect-20030128-1-src.tar.bz2expect/examples),但它是一个非常短的脚本。如果您expect已经安装了该软件包,只需将其放入目录中调用的脚本unbuffer中/usr/local/bin:
#!/usr/bin/expect --
# Description: unbuffer stdout of a program
# Author: Don Libes, NIST
eval spawn -noecho $argv
set timeout -1
expect
Run Code Online (Sandbox Code Playgroud)
在 Debian 上,该unbuffer命令在expect-dev包中提供并安装为expect_unbuffer.
| 归档时间: |
|
| 查看次数: |
61675 次 |
| 最近记录: |