Isso não tem nada a ver com grep
- é porque o canal |
redireciona o fluxo de saída padrão stdout
, enquanto as mensagens Permission denied
estão no fluxo de erro padrão stderr
. Você poderia alcançar o resultado desejado combinando os fluxos usando 2>&1
(redirecionar o fluxo cujo descritor de arquivo é 2
para o fluxo cujo descritor de arquivo é 1
) para que stderr
e stdout
sejam canalizados para a entrada do comando grep
find / -name libGL.so.1 2>&1 | grep -v 'denied'
mas seria mais comum simplesmente descartar stderr
ao redirecioná-lo para /dev/null
find / -name libGL.so.1 2>/dev/null
Usando | & em vez de 2 > & 1 |
Se você der uma olhada na página de manual do Bash, provavelmente notará esta sinopse:
If
|&
is used, the standard error of command is connected to command2's standard input through the pipe; it is shorthand for2>&1 |
.
Você também pode usar essa construção também se quiser juntar STDERR e STDOUT:
find / -name libGL.so.1 |& grep -v 'denied'