Shell 将grep过滤器的输出附加到文件

Shell 将grep过滤器的输出附加到文件,shell,grep,tcpdump,Shell,Grep,Tcpdump,我正试图将grep过滤器的输出保存到一个文件中 tcpdump -i eth0 -n -s 0 port 5060 -vvv | grep "A.B.C." 我想长时间运行tcpdump,并将某个IP过滤到一个文件中 tcpdump -i eth0 -n -s 0 port 5060 -vvv | grep "A.B.C." 这个很好用。它显示了来自我的网络的IP 但当我在末尾添加>>file.dump时,文件总是空的 我的剧本: tcpdump -i eth0 -n -s 0 port 5

我正试图将grep过滤器的输出保存到一个文件中

tcpdump -i eth0 -n -s 0 port 5060 -vvv | grep "A.B.C."
我想长时间运行tcpdump,并将某个IP过滤到一个文件中

tcpdump -i eth0 -n -s 0 port 5060 -vvv | grep "A.B.C."
这个很好用。它显示了来自我的网络的IP

但当我在末尾添加>>file.dump时,文件总是空的

我的剧本:

tcpdump -i eth0 -n -s 0 port 5060 -vvv | grep "A.B.C." >> file.dump
是的,一定是格雷普。我不想使用tcpdump过滤器,因为它给了我数百万条线路,而使用grep,我每个IP只能得到一条线路

如何重定向将grep命令的完整输出附加到文件中?

tcpdump的输出可能是通过stderr进行的,而不是stdout。这意味着grep不会捕获它,除非您将其转换为stdout

为此,您可以使用:

然后,输出可能是一个连续的流,因此您必须告诉grep使用行缓冲。为此,您有选项-line buffered选项

大家一起说:

tcpdump ... |& grep --line-buffered "A.B.C" >> file.dump
tcpdump的输出可能通过stderr,而不是stdout。这意味着grep不会捕获它,除非您将其转换为stdout

为此,您可以使用:

然后,输出可能是一个连续的流,因此您必须告诉grep使用行缓冲。为此,您有选项-line buffered选项

大家一起说:

tcpdump ... |& grep --line-buffered "A.B.C" >> file.dump

你试过这个吗:tcpdump-i eth0-n-s0端口5060-vvv|grep'A.B.C.>file.dump?是的,我试过了,不起作用,我想使用append,而不是overwrite这是因为tcpdump提供了一个连续的流,可能是通过stderr。如果你说tcpdump…|&grep-行缓冲A.B.C.?如果您仅出于测试目的尝试不使用grep,它是否正确写入文件@fedorqui是的,它至少对我有效,我能够从tcpdump命令中附加一个文件,我的意思是,没有行缓冲开关。是的!它正在使用&grep-line缓冲。感谢Fedorquiid,您尝试了这个:tcpdump-i eth0-n-s0端口5060-vvv|grep'A.B.C.>file.dump?是的,我尝试了,不起作用,我想使用append,而不是overwrite这是因为tcpdump提供了一个连续的流,可能通过stderr。如果你说tcpdump…|&grep-行缓冲A.B.C.?如果您仅出于测试目的尝试不使用grep,它是否正确写入文件@fedorqui是的,它至少对我有效,我能够从tcpdump命令中附加一个文件,我的意思是,没有行缓冲开关。是的!它正在使用&grep-line缓冲。谢谢你,费多基