ファイルにリダイレクトされる前にstdout(またはstderr)をフィルタリングする方法はありますか? "パイプにリダイレクト"するのはおそらく最良の方法ではありませんが、私はその効果で何かを達成する最も簡単な方法を探しています。パイプにリダイレクトする
使用シナリオは次のとおりです。私は原則としてgawk --lint-invalidを使用してスクリプトで起こりうるエラーを検出し、偽のものを除外したい。エラーをファイルにリダイレクトする代わりに、ファイルを調べるときにそれらをgreppingする代わりに、ファイルに書き込む前にフィルタリングを実行したいと思います。
例:このスクリプトは、すべての2行目をstderrに出力します。
echo -ne 'a\nb\nc\nd\n' | gawk --lint=invalid 'BEGIN {b = 1;} // {if (b) print; else print > "/dev/stderr"; b = !b;}' 1>/dev/null 2>errors
cat errors | less
gawk: warning: regexp constant `//' looks like a C++ comment, but is not
b
d
gawk: (FILENAME=- FNR=4) warning: no explicit close of file `/dev/stderr' provided
しかし、偽のゴークの警告が表示されます(これらは懸念されません)。たとえば、フィルタを使用して、
filter-gawk-output.sh
---------------------
grep -Ev 'looks like a|explicit close'
エラーファイルにリダイレクトするときに、そのインラインで行うことはできますか?
gawk --lint=invalid 'whatever' INPUTFILE 2> GAWK_ERRORS.LOG
STDERR
がエラーログにリダイレクトされます。この方法:エラーファイルを調べるとき は今、私はいつも
cat errors | ./filter-gawk-output.sh | less
ここでは、あなたの(間違いなく一貫した)あなたの猫の役に立たない使用について避けられないコメントがあります。 http://partmaps.org/era/unix/award.html – tripleee
@トライプルーを参照してください:私はcatの使用がパイプライン入力をより明瞭にし、スクリプトに追加のパラメータを必要としないと主張することができます。もっと実用的なことに、たくさんのことをしようとすると 'cat 'でパイプラインを開始すると、grepやsedなどを簡単に追加できます – haelix
' gawk'が診断をリダイレクトする方法はないと思いますstderr以外の場所に移動します。これが当てはまる場合、疑問は実際にあなたのシェル( 'bash'、' tcsh'、 'zsh'など)の一般的な構文です。 – FooF