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*
ellernm -Do /lib/lib* | grep function_name
ellerldconfig -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.