コマンドの出力をgrepにパイプし、別のコマンドにパイプします。

コマンドの出力をgrepにパイプし、別のコマンドにパイプします。

あるスクリプトの出力を取得し、この入力をgrepにパイプし、grepの出力を別のスクリプトにパイプします。

./script1 | grep 'expr' | ./script2

しかし、2番目のスクリプトは入力をまったく受け取りません。同様に、script2withcatscript1withを置き換えても何も印刷されませんping

ping localhost | grep localhost | cat

grep私が次のように変更した場合awk

ping localhost|awk '{print $1}'|cat

どうしたの?

ベストアンサー1

grepバッファリングです(出力が端末ではないと判断するためです。厳密に言えば、これはCライブラリの動作です)。

この機能を無効にするには、次を実行しますunbuffer -p(標準入力からデータを読み取る必要があり-pます).unbuffer

ping localhost | unbuffer -p grep localhost | cat

または、grep行ごとのバッファリングを指定します(サポートされている場合)。

ping localhost | grep --line-buffered localhost | cat

おすすめ記事