I “m på Ubuntu, og jeg skrev cat .bash_history | grep git
og det vendte tilbage
Binær fil (standardindgang) matcher
Min bash_history
findes, og der er mange linjer i den der starter med git
.
Hvad fik denne fejl til at vise, og hvordan kan jeg rette den?
Kommentarer
Svar
Presuma filen .bash_history
begynder med data, der ikke er tekst, og derfor behandler grep
filen som binær. Dette bekræftes af file .bash_history
output:
.bash_history: data
Du kan læse et par bytes fra start for at have en overensstemmelse view:
head -c1K .bash_history
Her læser jeg først 1 KiB.
Du kan pibe STDOUT til hexdump
/ od
eller lignende.
Som en sidebemærkning tager grep
filnavn ( s) som argument, så cat
er ubrugelig her; prøv dette:
grep git .bash_history
Kommentarer
- I ' Jeg er stadig ikke sikker på, hvordan grep-problemet skal løses,
head -c1k .bash_history
læser de første 38 linjer i min .bash_history-fil. Alt var læsbart - @TatakaiWasumi Hvad er output fra
grep -a git .bash_history
? - Det fungerede! Jeg fik alt, hvad jeg ville have af det. Hvad gør
-a
? - @TatakaiWasumi
-a
gørgrep
at behandle filen som binær. -
-a
fågrep
til at behandle en binær fil, som om den var tekst.
Svar
Du kan bruge grep -a "pattern"
.
fra man grep side:
-a, –text
Behandl en binær fil som om den var tekst; dette svarer til –binary-files = text mulighed.
Kommentarer
- Dette har hjulpet mig, når jeg bruger flagget
-z
til at matche på tværs af linjer. - Det har fungeret for mig, men stadig underligt, fordi min fil ikke er ' en binær fil. [grid @ serverdg2 trace] $ fil listener.log listener.log: data
Svar
Jeg havde samme problem, når jeg vil gribe min .bash_history
. (Lille note: Jeg omdøbte min historie, så der blev oprettet en ny. Denne nye historie blev ikke behandlet som en binær.)
I @heemayls svar står det, at grep
tager filnavne og cat
ville være ubrugelig. Dette er ikke helt sandt. Fra grep
s man-side:
Hvis der ikke er angivet nogen filer, eller hvis filen “-” er givet, grep søger efter standard input.
Så du kan bruge cat
og pibe den til grep
. Dette løser dog ikke problemet, at .bash_history
behandles som en binær. Den eneste rigtige ting er at bruge grep -a
(Som i svaret fra @AK_), uanset om du grep
historikken direkte eller med cat
og et rør.
cat .bash_history | grep -a git
eller
grep -a git .bash_history
Svar
Fejl skyldes, at dataene i filen er binære, du kan bruge kommandoen strings til at se det menneskelige læsbare (dvs. strings
) del, som du normalt vil søge ved hjælp af grep
strings data | grep -i whatever
Kommentarer
- Dette adresserer ikke den første del af spørgsmålet, dvs. " hvad der forårsager problemet ".
Svar
Dette kan skyldes af null bytes i din bash-historie. Fjernelse af linjer med nul tegn kan løse problemet. Du kan tjekke for dem ved hjælp af grep “s Perl-regexp-tilstand:
grep -Pa "\x00" .bash_history
Dette indlæg har forslag til ikke-unix-systemer.
file .bash_history
(file ~/.bash_history
)?.bash_history: data