grep não imprime correspondências

0

Estou tentando imprimir todas as tentativas de acesso root do /var/log/auth.log com o grep. Mas parece que o grep não está processando o arquivo inteiro, em vez disso o grep está parando em algum ponto:

> less /var/log/auth.log | grep Accepted
Apr 10 08:32:43 sshd[16845]: Accepted password for root from ... port 49061 ssh2
Apr 10 09:42:38 sshd[15451]: Accepted password for root from ... port 48990 ssh2
Apr 10 10:11:17 sshd[21592]: Accepted password for root from ... port 48686 ssh2
Apr 10 12:09:03 sshd[5757]: Accepted password for root from ... port 62535 ssh2
Apr 11 18:12:12 sshd[1804]: Accepted password for root from ... port 40765 ssh2
Apr 11 18:12:30 sshd[1884]: Accepted password for root from ... port 40808 ssh2
Apr 11 18:13:46 sshd[2063]: Accepted password for root from ... port 40735 ssh2
Apr 11 19:58:44 sshd[17103]: Accepted password for root from ... port 40684 ssh2
Apr 11 20:48:06 sshd[24583]: Accepted password for root from ... port 40466 ssh2
Binary file (standard input) matches

Como podemos ver, existem apenas entradas até o dia 11 de abril. Então, se eu tentar o seguinte comando:

> less /var/log/auth.log | grep "Apr 12"
Binary file (standard input) matches

Nada é impresso. Mas no arquivo /var/log/auth.log as entradas "12 de abril" estão presentes, como podemos ver se eu executar este comando (eu também provei isso imprimindo o arquivo inteiro com cat):

> less /var/log/auth.log | grep -c "Apr 12"
4297

Eu não entendo o que estou fazendo de errado com o meu primeiro comando grep.

    
por JulianH 12.04.2018 / 18:23

1 resposta

3

Para forçar o grep a tratar arquivos com conteúdo binário como ASCII, use seu -a flag:

grep -a 'Apr 12' /var/log/auth.log

Esta é uma opção não padrão, mas é implementada no GNU grep e no grep no OpenBSD (e provavelmente no outro BSD também).

Quando os dados processados pelo GNU grep contiverem bytes nulos ou quando forem codificados incorretamente para o código do idioma atual, grep o tratará como binário. Com -a ou --binary-files=text , o GNU grep será forçado a tratar esses dados como texto. Veja a documentação para a opção --binary-files no manual GNU grep .

grep normalmente se recusa a enviar dados binários, pois pode ter "efeitos colaterais desagradáveis se a saída for um terminal e se o               driver de terminal interpreta alguns como comandos. "(citação do manual).

    
por 12.04.2018 / 18:31

Tags