Eso no tiene nada que ver grep, es porque la tubería |redirige el flujo de salida estándar stdoutmientras que los Permission deniedmensajes están en el flujo de error estándar stderr. Puede lograr el resultado que desea combinando las secuencias usando 2>&1(redirigir la secuencia cuyo descriptor de archivo es 2a la secuencia cuyo descriptor de archivo es 1) de modo que stderrademás stdoutse canalice a la entrada del comando grep
find / -name libGL.so.1 2>&1 | grep -v 'denied'
pero sería más habitual simplemente descartar stderrpor completo redirigiéndolo a/dev/null
find / -name libGL.so.1 2>/dev/null
Usando | & en lugar de 2> & 1 |
Si echas un vistazo a la página de manual de Bash, es probable que notes esta propaganda:
Si |&se usa, el error estándar de comando se conecta a la entrada estándar de command2 a través de la tubería; es taquigrafía para 2>&1 |.
Por lo tanto, también puede usar esta construcción si desea unir STDERR y STDOUT:
find / -name libGL.so.1 |& grep -v 'denied'
/foo/bar/denied/libGL.so.1, combinarstdoutystderrluego filtrar ocultaría el resultado