Manpage for grep beskriver -I flag som følger :

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

Det siger også dette om binære filer:

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

Jeg kan ikke tænke af et scenario, hvor jeg ville være interesseret i matches i binære filer. Hvis der findes et sådant scenario, skal det helt sikkert være undtagelsen snarere end normen. Hvorfor ignorerer “t grep binære filer som standard i stedet for at indstille dette flag til at gøre det?

Kommentarer

  • Du kan indstille variablen GREP_OPTIONS til dine foretrukne indstillinger, så behøver du ikke ' at bruge så mange kommandolinjekontakter .
  • En note til andre kommandoer, der ikke understøtter en sådan variabel: Du kan indstille standardindstillinger ved at definere et alias i dit .(ba|z|foo)shrc': alias grep = " grep -I " `.
  • Dette kan faktisk være meget nyttigt. For eksempel søgte jeg efter enhedsversionen af et projekt og kunne ikke ' ikke huske, hvilken fil den blev gemt i. Jeg søgte efter formatet på versionen, og den kom med nogle binære filer, der matcher. Det viste sig da det var pre-version 5, var versionen kun til stede i en binær fil, så uden den binære match kunne jeg muligvis have savnet den.
  • FYI Ther e ' et værktøj ack hvilket er en slags " bedre end grep ". Ack søger ikke ' t binære filer. I Debian kommer det under navnet " ack-grep ".

Svar

Ikke alt, hvad grep mener er en binær fil, er faktisk en binær fil. for eksempel. marionetlogfiler har ansi farvekodning i sig, hvilket får grep til at tro, at de er binære. Jeg vil stadig søge efter dem, hvis jeg kigger igennem / var / log dog.

Kommentarer

  • Det samme gælder for PDF-filer som godt.
  • + historisk kunne grep IKKE gøre det, så kun for kompatibilitet skal standard være altomfattende.
  • @ OlivierDulac giver det mening, ellers bør ignorering af binære filer være standard.

Svar

grep s evne til at søge binære filer er også nyttige, når jeg sammensætter et program, og linkeren (ld) klager over, at en funktion ikke findes. Jeg kan bruge en kommando som

grep function_name /lib/lib*

til at finde det bibliotek, der indeholder det. (Biblioteker er binære filer.)

Kommentarer

  • I så fald skal du ' hellere bruge grep -l function_name /lib/lib* eller nm -Do /lib/lib* | grep function_name eller ldconfig -p | grep -o '/.*/lib.*' | xargs nm -Do | grep function_name dog.
  • Nå, grep some_function /lib/* er kortere og giver normalt det rigtige svar – navnet på det bibliotek, jeg leder efter. Men ja, nogle gange kræves der også en mere sofistikeret tilgang som dine.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *