毎秒1行のデータを出力するプロセスを実行しています。すべての出力を「output.txt」として出力したいのですが、@のある行も別のファイル「emails.txt」に出力したいと思います。以下のように試しましたが、grep部分は機能しません。
myProgrram | pee 'tee output.raw 2>&1' 'grep @ > email.txt'
これを改善する方法についてのアイデアはありますか?ありがとうございます。
ベストアンサー1
解決策は次のとおりです。
myprogram 2>&1 | tee output.txt | grep --line-buffered @ > emails.txt
説明する:
stdin
「標準入力」(ファイル記述子番号0
)です。stdout
「標準出力」(ファイル記述子番号1
)です。stderr
「標準エラー」(ファイル記述子番号2
)です。2>&1
stderr
に送信されたコンテンツをリダイレクトしますstdout
。|
stdout
左パイプがstdin
右パイプに接続されます。tee output.txt
同時に2つのことを行います。stdin
に書くoutput.txt
stdin
に渡されましたstdout
。
|
stdout
にパイプを接続しますstdin
。grep --line-buffered @
@
fromを含む行を選択してstdin
に送信しますstdout
。> emails.txt
stdin
に何でも書いてくださいemails.txt
。
この--line-buffered
フラグはgrep
出力にラインバッファリングを使用するため、パフォーマンスが低下する可能性がありますが、みんな出力はファイルとして印刷されます。