stdoutとして出力し、ファイルとしてgrep

stdoutとして出力し、ファイルとしてgrep

テキストをstdout。例:

$ myscript
Line A
Line B
Line C

$ myscript | grep -P 'A|C' > out.file

$ cat out.file
Line A
Line C

端末で最初のコマンドの出力を見て、2番目のコマンドの出力をファイルに保存したいと思います。同時に。を使ってみましたteeが、結果はありませんでした。または、より良い方法は、次を使用することです。結果は正反対です

答え1

端末で最初のコマンドの出力を見て、2番目のコマンドの出力をファイルに保存したいと思います。

あなたが見るものがどこから来たのか気にしない限り標準出力または標準エラー、以下を引き続き使用できますtee

myscript | tee /dev/stderr | grep -P 'A|C' > out.file

Linuxでは動作します。 "/dev/stderr"が他の* nixでも動作するかどうかわかりません。

答え2

{ ... | tee /dev/fd/3 | grep -e A -e C > out.file; } 3>&1

または、プロセス置換(ksh93、zsh、またはbash)を使用してください。

... | tee >(grep -e A -e C > out.file)

zshを使う:

... >&1 > >(grep -e A -e C > out.file)

答え3

別のアプローチは次のとおりですsed

myscript | sed '/PATTERN/w out.file'

デフォルトでは、受信したsedすべての行を印刷します。標準入力myscriptこれは標準出力この場合)すなわち、myscript出力全体が画面に表示される。
また、一致するすべての行は次のファイルに書き込まれPATTERNます。wout.file

答え4

teeコマンドの使用方法を指定していませんが、次のように動作します。

myscript | grep -P 'A|C' | tee out.file

少なくとも数分前は私のサーバーで実行していました。

関連情報