A página de manual de grep descreve o sinalizador -I da seguinte maneira :

-I Ignore binary files. This option is equivalent to --binary-file=without-match option. 

Também diz isso sobre arquivos binários:

 --binary-files=value Controls searching and printing of binary files. Options are binary, the default: search binary files but do not print them; without-match: do not search binary files; and text: treat all files as text. 

Não consigo pensar de um cenário em que eu me importaria com correspondências em arquivos binários. Se tal cenário existe, certamente deve ser a exceção e não a norma. Por que o “t grep não ignora os arquivos binários por padrão em vez de exigir a configuração desse sinalizador para fazer isso?

Comentários

  • Você pode definir a variável GREP_OPTIONS para suas configurações preferidas, então você não ' terá que usar tantas opções de linha de comando .
  • Uma observação para outros comandos que não suportam essa variável: você pode definir opções padrão definindo um alias em seu .(ba|z|foo)shrc': alias grep = " grep -I " `.
  • Isso pode realmente ser muito útil. Por exemplo, eu estava procurando pela versão Unity de um projeto e não consegui ' lembrar em qual arquivo ele foi mantido. Pesquisei o formato da versão e encontrei alguns arquivos binários que correspondem. Descobri como era pré-versão 5, a versão estava presente apenas em um arquivo binário, então, sem a correspondência binária, eu poderia ter perdido.
  • FYI Ther e ' sa tool ack que é uma espécie de " melhor do que grep ". Ack não ' pesquisa arquivos binários. No Debian, ele vem com o nome de " ack-grep ".

Resposta

Nem tudo que o grep pensa ser um arquivo binário, é na verdade um arquivo binário. por exemplo. Os logs do puppet têm códigos de cores ansi, o que faz o grep pensar que são binários. Eu ainda quero pesquisá-los se estiver navegando em / var / log.

Comentários

  • O mesmo vale para arquivos PDF como bem.
  • + historicamente o grep NÃO poderia fazer isso, então apenas para compatibilidade, o padrão deve ser completo.
  • @OlivierDulac faz sentido, caso contrário, ignorar os arquivos binários deve ser o padrão.

Resposta

grep capacidade de pesquisar Os arquivos binários também são úteis quando estou compilando um programa e o vinculador (ld) reclama que alguma função não foi encontrada. Posso usar um comando como

grep function_name /lib/lib*

para encontrar a biblioteca que o contém. (Bibliotecas são arquivos binários.)

Comentários

  • Nesse caso, você ' prefere usar grep -l function_name /lib/lib* ou nm -Do /lib/lib* | grep function_name ou ldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_name.
  • Bem, grep some_function /lib/* é mais curto e geralmente fornece a resposta correta – nome da biblioteca que estou procurando. Mas sim, às vezes uma abordagem mais sofisticada como a sua também é necessária.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *