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'