perl – Bash:如何在“实时”管道中进行替换?

前端之家收集整理的这篇文章主要介绍了perl – Bash:如何在“实时”管道中进行替换?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的办公室防火墙中,我使用如下命令:

$sudo tcpdump -v -s 1500 -i eth0 port 25 | grep 'smtp: S'

监控发送邮件的LAN客户端(我需要从某个客户端提前检测到任何可能的垃圾邮件机器人,我们有非常宽松的安全策略,这里…… :-().

到目前为止,非常好:任何客户发送电子邮件后我都会有连续输出.

但是,如果我添加一些过滤器以获得更清晰的输出,如下所示:

$sudo tcpdump -v -s 1500 -i eth0 port 25 | grep 'smtp: S' | perl -pe 's/(.*?\)) (.*?)\.\d+ \>(.*)/$2/'

(这里我打算只得到源ip /名称),在tcpdump输出超过(bash?)缓冲区大小…之前我没有得到任何输出(或者至少我猜是这样……).

使用’sed’代替’perl’没有任何变化……

任何提示连续输出过滤数据的提示

解决方法

在第一个命令之前放入stdbuf:

sudo stdbuf -o0 tcpdump ...

猜你在找的Perl相关文章