I «m på Ubuntu og jeg skrev cat .bash_history | grep git
og den returnerte
Binærfil (standardinngang) samsvarer
Min bash_history
finnes og det er mange linjer i den som starter med git
.
Hva forårsaket denne feilen og hvordan kan jeg fikse den?
Kommentarer
Svar
Presuma filen .bash_history
begynner med data som ikke er tekst, og derfor behandler grep
filen som binær. Dette bekreftes av file .bash_history
utdata:
.bash_history: data
Du kan lese noen få byte fra start for å ha en samsvarende visning:
head -c1K .bash_history
Her leser jeg først 1 KiB.
Du kan pipe STDOUT til hexdump
/ od
eller lignende.
Som en sidemerknad tar grep
filnavn ( s) som argument, så cat
er ubrukelig her; prøv dette:
grep git .bash_history
Kommentarer
- I ' Jeg er fortsatt ikke sikker på hvordan grep-problemet skal løses.
head -c1k .bash_history
les de første 38 linjene i .bash_history-filen min. Alt var lesbart - @TatakaiWasumi Hva er resultatet av
grep -a git .bash_history
? - Det fungerte! Jeg fikk alt jeg ønsket av det. Hva gjør
-a
? - @TatakaiWasumi
-a
gjørgrep
for å behandle filen som binær. -
-a
fågrep
til å behandle en binær fil som om den var tekst.
Svar
Du kan bruke grep -a "pattern"
.
fra man grep side:
-a, –text
Behandle en binær fil som om den var tekst; dette tilsvarer –binary-files = text alternativet.
Kommentarer
- Dette har hjulpet meg når jeg bruker
-z
-flagget til å matche på tvers av flere linjer. - Det har fungert for meg, men fremdeles rart fordi filen min ikke er ' en binær fil. [grid @ serverdg2 trace] $ file listener.log listener.log: data
Svar
Jeg hadde samme problemet når jeg vil grep .bash_history
. (Lille merknad: Jeg ga nytt navn til historikken min, slik at en ny ble opprettet. Denne nye historien ble ikke behandlet som en binær.)
I svaret på @heemayls står det at grep
tar filnavn og cat
ville være ubrukelig. Dette stemmer ikke helt. Fra grep
s man-side:
Hvis ingen filer er spesifisert, eller hvis filen “-” er gitt, grep søker på standardinngang.
Så du kan bruke cat
og pipe den til grep
. Dette løser imidlertid ikke problemet at .bash_history
behandles som en binær. Det eneste rette er å bruke grep -a
(Som i svaret fra @AK_) enten du grep
historien direkte eller med cat
og et rør.
cat .bash_history | grep -a git
eller
grep -a git .bash_history
Svar
Feil skyldes at dataene i filen er binære, du kan bruke strengekommandoen for å se det menneskelige lesbare (dvs. strings
) del som du normalt vil søke med grep
strings data | grep -i whatever
Kommentarer
- Dette adresserer ikke den første delen av spørsmålet, dvs. " hva som forårsaker problemet ".
Svar
Dette kan være forårsaket av null byte i din bash-historie. Fjerning av linjer med null tegn kan løse problemet. Du kan se etter dem ved hjelp av grep «s Perl-regexp-modus:
grep -Pa "\x00" .bash_history
Dette innlegget har forslag til ikke-unix-systemer.
file .bash_history
(file ~/.bash_history
)?.bash_history: data