Como suprimir resultados de correspondência de arquivos binários no grep [closed]

215

Ao usar grepno linux, o resultado geralmente contém muitas "correspondências de arquivos binários XXX", das quais não me importo. Como suprimir essa parte dos resultados ou como excluir arquivos binários no grep?

RandyTek
fonte
12
grep -I .........
1
@skwllsp Mas com -l, os resultados não contêm a linha correspondente, apenas o nome do arquivo correspondente.
precisa saber é o seguinte
Existe uma opção para as linhas: grep -I -n -H
6
Isso está fora de tópico? Wow
CoffeeTableEspresso

Respostas:

302

Existem três opções que você pode usar. -Ié excluir arquivos binários no grep. Outros são para números de linhas e nomes de arquivos.

grep -I -n -H 


-I -- process a binary file as if it did not contain matching data; 
-n -- prefix each line of output with the 1-based line number within its input file
-H -- print the file name for each match

Portanto, essa pode ser uma maneira de executar o grep:

grep -InH your-word *
user184968
fonte
isso funciona. Thx @skwllsp
RandyTek
7
Eu usaria -Irnonde rsignifica recursivo procurar dentro de todas as pastas. Hé exsessive aqui
vladkras 19/04/16
@ vladkras, "H é exsessivo aqui" - você quer dizer redundante, ou seja, já é o padrão?
cp.engr 21/02
Obrigado por esclarecer o que as opções curtas significam em sua resposta. Existem tantas respostas de comandos linux concisas no SO que não dão explicações, o que acho irritante.
jrahhali
1
@AaronFranke: A -nbandeira diz ao grep para informar os números de linha dos arquivos nos quais encontrou uma correspondência. "Baseado em 1" significa que a contagem de linhas começa de um em vez de zero, como geralmente é feito na programação. Portanto, se a primeira linha do seu arquivo nomeada example.txtfor Hello, world, a segunda linha é Hello cate a terceira linha é cats are cool, então, procurando por "cat" via grep -n cat example.txt, você obteria example.txt:2: Hello cate example.txt:3: cats are cool.
Jvriesem
11

Esta é uma pergunta antiga e foi respondida, mas pensei em colocar a opção --binary-files = text aqui para quem quiser usá-la. A opção -I ignora o arquivo binário, mas se você deseja que o grep trate o arquivo binário como um arquivo de texto, use --binary-files = text da seguinte maneira:

bash$ grep -i reset mediaLog*
Binary file mediaLog_dc1.txt matches
bash$ grep --binary-files=text -i reset mediaLog*
mediaLog_dc1.txt:2016-06-29 15:46:02,470 - Media [uploadChunk  ,315] - ERROR - ('Connection aborted.', error(104, 'Connection reset by peer'))
mediaLog_dc1.txt:ConnectionError: ('Connection aborted.', error(104, 'Connection reset by peer'))
bash$
amadain
fonte