带有来自 tail -f 的管道的 grep 和 sed 似乎正在缓存

Bra*_*one 2 linux bash grep sed command-line

我正在尝试使用一个工作系统来监视特殊日志。我通常只想要一个非常具体的模式,我使用它来提取grep和从tail -f. 我注意到 grep 不会输出所有内容,而是保留一些行缓冲。我想如果您有一个管道可以输出所有内容,然后终止并关闭流,那这很有意义。
但是tail -f这对我来说不起作用。

出现同样的问题sed

这是我要使用的示例命令:

clear && tail -F -n1000 /var/log/fail2ban.log | grep 'WARNING.*Ban' | sed s/'fail2ban.actions: WARNING '//g | grep -E --color 'ssh-iptables-perma|$'
Run Code Online (Sandbox Code Playgroud)

提供一个例子:

上面命令的最后一行是这样的:

2015-05-04 11:17:24,551 [ssh-iptables] Ban x.x.x.x
Run Code Online (Sandbox Code Playgroud)

并使用此命令:

clear && tail -F -n1000 /var/log/fail2ban.log | grep 'WARNING.*Ban' | sed s/'fail2ban.actions: WARNING '//g
Run Code Online (Sandbox Code Playgroud)

最后一行是这样的:

2015-05-04 19:45:17,615 [ssh-iptables] Ban y.y.y.y
Run Code Online (Sandbox Code Playgroud)

删除更多的管道让我进一步了解最新的条目。

我怎样才能避免管道中的这种缓存?

Cyr*_*rus 6

添加grep的选项--line-bufferedsed选项--unbuffered