我正在尝试将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命令的完整输出重定向(追加)到文件?
答案 0 :(得分:4)
tcpdump
的输出可能是通过stderr,而不是标准输出。这意味着除非您将其转换为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