Jsem v Ubuntu a zadal jsem cat .bash_history | grep git
a vrátil se
Binární soubor (standardní vstup) odpovídá
Můj bash_history
existuje a je v něm mnoho řádků která začíná git
.
Co způsobilo zobrazení této chyby a jak ji mohu opravit?
Komentáře
Odpověď
Presuma bly soubor .bash_history
začíná netextovými daty, a proto grep
považuje soubor za binární. Potvrzuje to výstup file .bash_history
:
.bash_history: data
Od začátku si můžete přečíst několik bajtů, abyste měli vyhovující zobrazit:
head -c1K .bash_history
Zde čtu nejprve 1 KiB.
STDOUT můžete poslat potrubím na hexdump
/ od
nebo podobné.
Poznámka: grep
přebírá název souboru ( s) jako argument, takže cat
je zde k ničemu; vyzkoušejte toto:
grep git .bash_history
Komentáře
- I ' div Stále si nejsem jistý, jak vyřešit problém s grepem,
head -c1k .bash_history
přečíst prvních 38 řádků mého souboru .bash_history. Všechno bylo čitelné - @TatakaiWasumi Jaký je výstup
grep -a git .bash_history
? - To fungovalo! Dostal jsem z toho vše, co jsem chtěl. Co
-a
dělá? - @TatakaiWasumi
-a
dělágrep
považovat soubor za binární. -
-a
vytvořitgrep
zpracovat binární soubor, jako by to byl text.
Odpověď
Můžete použít grep -a "pattern"
.
ze stránky man grep :
-a, –text
Zpracuje binární soubor, jako by to byl text; to odpovídá volbě –binary-files = text .
Komentáře
- To mi pomohlo při použití příznaku
-z
pro shodu na několika řádcích. - Fungovalo to pro mě, ale stále divně, protože můj soubor není ' ta binární soubor. [grid @ serverdg2 trace] $ file listener.log listener.log: data
Odpověď
Měl jsem stejný problém, když chci pozdravit svůj .bash_history
. (Malá poznámka: Přejmenoval jsem svou historii, aby byla vytvořena nová. Tato nová historie nebyla považována za binární.)
V odpovědi @heemayls je uvedeno, že grep
přebírá názvy souborů a cat
by byl k ničemu. To není úplně pravda. Z grep
s manuálové stránky:
Pokud nejsou zadány žádné soubory nebo pokud je soubor „-“ vzhledem k tomu, grep prohledá standardní vstup.
Takže můžete použít cat
a přesměrovat jej na grep
. To však nevyřeší problém, že .bash_history
je považován za binární. Jediná správná věc je použít grep -a
(jako v odpovědi od @AK_), ať už grep
historii přímo nebo s cat
a potrubí.
cat .bash_history | grep -a git
nebo
grep -a git .bash_history
Odpověď
Chyba je způsobena tím, že data v souboru jsou binární, můžete použít příkaz strings, abyste viděli člověka čitelného (tj. strings
) část, kterou byste normálně hledali pomocí grep
strings data | grep -i whatever
Komentáře
- Tím se neřeší první část otázky, tj. " co způsobuje problém ".
Odpověď
Může to být způsobeno nulovými bajty ve vaší historii bash. Problém může vyřešit odebrání řádků s nulovými znaky. Můžete je zkontrolovat pomocí režimu Perl-regexp grep:
grep -Pa "\x00" .bash_history
Tento příspěvek má návrhy pro systémy jiné než unix.
file .bash_history
(file ~/.bash_history
)?.bash_history: data