Como posso filtrar as “Permission denied” de encontrar saída? [duplicado]

7

Comecei a usar sed recentemente. Uma maneira prática que eu uso é ignorar linhas sem importância de um arquivo de log:

tail -f example.com-access.log | sed '/127.0.0.1/d;/ELB-/d;/408 0 "-" "-"/d;'

Mas quando tento usá-lo de maneira semelhante com find , os resultados não são os esperados. Estou tentando ignorar qualquer linha que contenha "Permissão negada" assim:

find . -name "openssl" | sed '/Permission denied/d;'

No entanto, ainda recebo um monte de mensagens de "Permissão negada" em stdout .

EDITAR

Como mencionado na resposta correta abaixo, as mensagens "Permissão negada" estão aparecendo em stderr e NÃO stdout .

    
por Ben Harold 10.07.2013 / 04:12

2 respostas

17

O problema é a saída de erros impressa em stderr , portanto, o comando sed não pode capturar a entrada. A solução simples é: redirecionar o stderr para o stdout.

find . -name "openssl" 2>&1 | sed '/Permission denied/d;'
    
por 10.07.2013 / 04:56
13

Não sei por que você está tentando usar sed para remover as mensagens permissão negada da saída de find - a menos que você esteja tentando aprender como usar sed .

Eu simplesmente rodaria isso:

find . -name "openssl" 2>/dev/null

Aqui, estou redirecionando stderr (descritor de arquivo 2 ) para /dev/null (consulte man null ). Em outras palavras, 2>/dev/null simplesmente descarta tudo escrito em stderr .

    
por 22.07.2013 / 00:08