ファイルにリダイレクトされる前に stdout (または stderr) をフィルタリングする方法はありますか? 「パイプへのリダイレクト」はおそらく最良の方法ではありませんが、その効果で何かを達成する最も簡単な方法を探しています。
利用シーンは以下の通りです。私は原則として gawk --lint-invalid を使用して、スクリプトで発生する可能性のあるエラーを検出し、誤ったエラーを除外したいと考えています。ファイルを調べるときにエラーをファイルにリダイレクトして grep する代わりに、ファイルに書き込む前にフィルタリングを実行したいと考えています。
例: このスクリプトは、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
しかし、偽の gawk 警告が表示されます (これらは問題ではありません)。たとえば、次を使用してフィルタリングできます。
filter-gawk-output.sh
---------------------
grep -Ev 'looks like a|explicit close'
エラーファイルにリダイレクトするときにインラインで行うエレガントな方法はありますか? 今、エラーファイルを調べるとき、私はいつもそうしています
cat errors | ./filter-gawk-output.sh | less