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

tom*_*823 2 shell grep tcpdump

我正在尝试将 grep 过滤器的输出保存到文件中。

我想运行tcpdump很长时间,并且将某个IP过滤到一个文件中。

tcpdump -i eth0 -n -s 0 port 5060 -vvv | grep "A.B.C."
Run Code Online (Sandbox Code Playgroud)

这很好用。它显示了我网络中的 IP。

但是当我>> file.dump在最后添加时,文件总是空的。

我的脚本:

tcpdump -i eth0 -n -s 0 port 5060 -vvv | grep "A.B.C." >> file.dump
Run Code Online (Sandbox Code Playgroud)

是的,一定grep。我不想使用 tcpdump 过滤器,因为它给了我数百万行,而使用 grep 我只得到每个 IP 一行。

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

fed*_*qui 5

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

为此,您可以使用|&

tcpdump -i eth0 -n -s 0 port 5060 -vvv |& grep "A.B.C."
Run Code Online (Sandbox Code Playgroud)

然后,输出可能是连续流,因此您必须以某种方式告知grep使用行缓冲。为此,您可以选择--line-buffered

大家一起说:

tcpdump ... |& grep --line-buffered "A.B.C" >> file.dump
Run Code Online (Sandbox Code Playgroud)