在Mac OS-X中使用带有多个Grep命令的tail -f时没有输出

时间:2015-11-17 13:26:57

标签: macos bash shell

我正在尝试从Mac OS X终端执行以下命令:

$tail -f FILE_PATH | grep "DESIRED_STRING" | grep -v "EXCLUDED_STRING"

不幸的是,我没有得到任何结果。

但是,使用cat代替tail -f时:

$cat FILE_PATH | grep "DESIRED_STRING" | grep -v "EXCLUDED_STRING"

我得到了预期的结果。不幸的是,这种解决方法对我来说并不好,因为我需要实时拖尾文件。

1 个答案:

答案 0 :(得分:4)

grep默认缓冲其输出。由于tail -f永远不会完成,grep也不会完成,您必须等到最后一个累积了足够的输出以填充其缓冲区。使用cat,命令最终完成,允许两个grep完成并打印它们累积的任何输出(无论其缓冲区是否已填充)。

--line-buffered命令添加grep会更改grep缓冲其输出的方式,允许您在每行完成时查看输出。