我要在日志文件中添加-f标志。然后,我将其传递给grep,以仅查找包含“ X”的行。一切正常。现在,我想再次将此管道输送到另一个grep中,这将删除所有包含“ Y”的行。当我添加第二个管道时,文件停止刷新,看起来没有数据。
这是有效的命令: tail -f my_file.log | grep "X"
这是没有的命令: tail -f my_file.log | grep "X" | grep -v "Y"
我应该如何构造它以便命令起作用?
我要在日志文件中添加-f标志。然后,我将其传递给grep,以仅查找包含“ X”的行。一切正常。现在,我想再次将此管道输送到另一个grep中,这将删除所有包含“ Y”的行。当我添加第二个管道时,文件停止刷新,看起来没有数据。
这是有效的命令: tail -f my_file.log | grep "X"
这是没有的命令: tail -f my_file.log | grep "X" | grep -v "Y"
我应该如何构造它以便命令起作用?
Answers:
由于grep
缓冲了的输出,请使用--line-buffered
选项grep
来启用行缓冲:
tail -f /path/to/log | grep --line-buffered 'X' | grep -v 'Y'
如果您grep
没有该选项,则可以选择使用stdbuf
:
tail -f /path/to/log | stdbuf -oL grep 'X' | grep -v 'Y'
stdbuf
告诉libstdbuf.so
要使用的设置。
diff -u <(env) <(stdbuf env)
没有发现。但是现在我意识到我应该测试的是diff -u <(env) <(stdbuf -oL env)
。
tail -f test.txt | stdbuf -oL grep 'aaa' | grep 'bbb'
它不提供任何输出。请你帮助我好吗。
tail -f file|grep -v "Y"
。如果输出正常,则继续追加grep "X"
。