GrepとCutを同時に使用する

GrepとCutを同時に使用する

tcpdumpの出力をgrepして一部を切り取りたいのですが、以下のコマンドは機能しません。

tcpdump ... | grep -i --line-buffered "..." | cut -d'&' -f1,2

何が問題なのか知っていますか? tcpdumpがリアルタイムデータを生成するためだと思いますが、この問題を解決する方法がわかりません。

答え1

tcpdumpでこのオプションを使用してください-l

-l は標準出力がラインバッファリングされるようにします。これは、キャプチャされたデータを表示したい場合に便利です。たとえば、 tcpdump -l | tee dat'' ortcpdump -l> dat&tail -f dat ''です。

マンページに明確に記載されています。

tcpdump -l ... | grep -i "..." | cut -d'&' -f1,2

答え2

バックグラウンドプロセスでは、出力をtcpdumpファイルにパイプし、tail -F <file> --pid=$!それを使用して追跡できます。

そのように

tcpdump ... > tcpdump.log 2>&1 &
tail -F tcpdump.log --pid=$! | grep -i --line-buffered "..." | cut -d '&' -f1,2

関連情報