¿Cómo grep flujo de error estándar (stderr)?

Pregunta:

Estoy usando ffmpeg para obtener la metainformación de un clip de audio. Pero no puedo hacer grep.

    $ 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 
      ...

Verifiqué, esta salida de ffmpeg está dirigida a stderr.

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

Entonces creo que grep no puede leer el flujo de errores para detectar líneas coincidentes. ¿Cómo podemos permitir que grep lea el flujo de errores?

Usando el enlace nixCraft , redirigí el flujo de error estándar al flujo de salida estándar, luego grep funcionó.

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

Pero, ¿y si no queremos redirigir stderr a stdout?

Respuesta:

Si está usando bash ¿por qué no emplear tuberías anónimas, en esencia, una abreviatura de lo que dijo phunehehe:

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

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım