標準エラーストリーム(stderr)をどのようにgrepしますか?

標準エラーストリーム(stderr)をどのようにgrepしますか?

私はオーディオクリップのメタ情報を取得するためにffmpegを使用しています。しかし、私はそれをキャッチすることはできません。

    $ ffmpeg -i 01-Daemon.mp3  |grep -i Duration
    FFmpeg version SVN-r15261, Copyright (c) 2000-2008 Fabrice Bellard, et al.
      configuration: --prefix=/usr --bindir=/usr/bin 
      --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib
      --mandir=/usr/share/man --arch=i386 --extra-cflags=-O2 
      ...

確認すると、このffmpeg出力がstderrに渡されます。

$ ffmpeg -i 01-Daemon.mp3 2> /dev/null

そのため、grepは一致する行をキャッチするためにエラーストリームを読み取ることができないと思います。 grepからエラーストリームを読み取るにはどうすればよいですか?

使用ニッククラフトリンクを介して標準エラーストリームを標準出力ストリームにリダイレクトし、grepが機能しました。

$ ffmpeg -i 01-Daemon.mp3 2>&1 | grep -i Duration
  Duration: 01:15:12.33, start: 0.000000, bitrate: 64 kb/s

しかし、stderrをstdoutにリダイレクトしたくない場合はどうすればよいですか?

ベストアンサー1

bash匿名パイプを使用しない理由は、基本的にphuneheheが言ったことを省略したことです。

ffmpeg -i 01-Daemon.mp3 2> >(grep -i Duration)

おすすめ記事