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

Append output of grep filter to a file

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

我想运行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

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

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

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

为此,您可以使用 :

tcpdump -i eth0 -n -s 0 port 5060 -vvv |& grep "A.B.C."

然后,可能会发生输出是连续流的情况,因此您必须以某种方式告诉 grep 使用行缓冲。为此,您可以选择 --line-buffered 选项。

大家一起说:

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