1. ホーム
  2. linux

[解決済み] STDERRだけをフィルターに通す

2022-11-06 03:38:14

質問

bashで、STDERRをSTDOUTと統合する前にフィルターを通してパイプする方法はありますか?つまり、私はしたい

STDOUT ────────────────┐
                       ├─────> terminal/file/whatever
STDERR ── [ filter ] ──┘

よりも

STDOUT ────┐
           ├────[ filter ]───> terminal/file/whatever
STDERR ────┘

どのように解決するのですか?

以下はその例です。 bashでファイルディスクリプタを交換する方法 . a.outの出力は、'STDXXX: ' という接頭辞を除いた次のようなものです。

STDERR: stderr output
STDOUT: more regular

./a.out 3>&1 1>&2 2>&3 3>&- | sed 's/e/E/g'
more regular
stdErr output

上記リンク先より引用。

<ブロッククオート
  1. まずstdoutを&3として保存(&1が3にダブる)。
  2. 次にstdoutをstderrに送る(&2を1にダブらせる)
  3. stderrを&3 (stdout)に送信(&3は2にダブります。)
  4. &3を閉じる(&-は3にダブる)。