De manpage voor grep beschrijft de -I vlag als volgt :

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

Er staat ook dit over binaire bestanden:

 --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. 

Ik kan niet denken van een scenario waarin ik zou geven om overeenkomsten in binaire bestanden. Als een dergelijk scenario bestaat, moet het zeker eerder uitzondering dan norm zijn. Waarom negeert “t grep binaire bestanden standaard niet in plaats van deze vlag in te stellen om dit te doen?

Reacties

  • Je kunt de variabele GREP_OPTIONS instellen op je voorkeursinstellingen, dan hoef je ' niet zoveel schakelopties voor de opdrachtregel te gebruiken .
  • Een opmerking voor andere opdrachten die een dergelijke variabele niet ondersteunen: u kunt standaardopties instellen door een alias te definiëren in uw .(ba|z|foo)shrc': alias grep = " grep -I " `.
  • Dit kan erg handig zijn. Ik was bijvoorbeeld op zoek naar de Unity-versie van een project, en kon ' niet onthouden in welk bestand het was bewaard. Ik zocht naar het formaat van de versie, en het kwam met enkele binaire bestanden die overeenkomen. Het bleek aangezien het pre-versie 5 was, was de versie alleen aanwezig in een binair bestand, dus zonder de binaire overeenkomst had ik het misschien gemist.
  • Ter info e ' sa tool ack die een beetje " beter is dan grep ". Ack zoekt niet ' naar binaire bestanden. In Debian komt het onder de naam " ack-grep ".

Antwoord

Niet alles waarvan grep denkt dat het een binair bestand is, is eigenlijk een binair bestand. bijv. puppets logs hebben een ansi-kleurcodering, waardoor grep denkt dat ze binair zijn. Ik zou ze nog steeds willen doorzoeken als ik door / var / log ga.

Opmerkingen

  • Hetzelfde geldt voor pdf-bestanden als goed.
  • + historisch gezien kon grep dat NIET doen, dus alleen voor compatibiliteit moet de standaard allesomvattend zijn.
  • @OlivierDulac het is logisch, anders zou het negeren van binaire bestanden de standaard.

Answer

grep s mogelijkheid om te zoeken binaire bestanden zijn ook handig als ik een programma compileer en de linker (ld) klaagt over een functie die niet wordt gevonden. Ik kan een commando als

grep function_name /lib/lib*

gebruiken om de bibliotheek te vinden die het bevat. (Bibliotheken zijn binaire bestanden.)

Opmerkingen

  • In dat geval ' gebruik je liever grep -l function_name /lib/lib* of nm -Do /lib/lib* | grep function_name of ldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_name.
  • Nou, grep some_function /lib/* is korter en geeft meestal het juiste antwoord – naam van de bibliotheek die ik zoek. Maar ja, soms is ook een meer geavanceerde benadering zoals de uwe vereist.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *