我正在尝试从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"
我得到了预期的结果。不幸的是,这种解决方法对我来说并不好,因为我需要实时拖尾文件。
答案 0 :(得分:4)
grep
默认缓冲其输出。由于tail -f
永远不会完成,grep
也不会完成,您必须等到最后一个累积了足够的输出以填充其缓冲区。使用cat
,命令最终完成,允许两个grep
完成并打印它们累积的任何输出(无论其缓冲区是否已填充)。
向--line-buffered
命令添加grep
会更改grep
缓冲其输出的方式,允许您在每行完成时查看输出。