テキストをstdout
に出力するスクリプトがあります。このすべての出力を端末で確認したいと同時に、いくつかの行をフィルタリングしてファイルに保存したいと考えています。例:
$ myscript
Line A
Line B
Line C
$ myscript | grep -P 'A|C' > out.file
$ cat out.file
Line A
Line C
ターミナルで最初のコマンドの出力を表示し、2番目のコマンドの出力をファイルに保存したい。同時に。 tee
を使用してみましたが、結果がないか、またはreversed result 。
ターミナルで最初のコマンドの出力を表示し、2番目のコマンドの出力をファイルに保存したい。
あなたが見ているものがstdoutからであるかstderrからのものであるかを気にしない限り、tee
を使用できます:
myscript | tee /dev/stderr | grep -P 'A|C' > out.file
Linuxで動作します。 「/ dev/stderr」が他の* nixにも同様に適用できるかどうかはわかりません。
{ ... | 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)
sed
の別の方法を次に示します。
myscript | sed '/PATTERN/w out.file'
デフォルトでは、sed
はすべての行を出力するため、この場合stdoutはstdinと同じになります(つまり、myscript
on screen)。
さらに、PATTERN
に一致するすべての行はw
ritten to out.file