Je « suis sous Ubuntu et jai tapé cat .bash_history | grep git
et il a renvoyé
Correspondance du fichier binaire (entrée standard)
Mon bash_history
existe et contient de nombreuses lignes qui commence par git
.
Quest-ce qui a provoqué cette erreur et comment puis-je la corriger?
Commentaires
Réponse
Presuma bly le fichier .bash_history
commence avec des données non textuelles, donc grep
traite le fichier comme binaire. Ceci est confirmé par la sortie file .bash_history
:
.bash_history: data
Vous pouvez lire quelques octets depuis le début pour avoir un view:
head -c1K .bash_history
Ici, je lis dabord 1 Kio.
Vous pouvez diriger le STDOUT vers hexdump
/ od
ou similaire.
En remarque, grep
prend le nom de fichier ( s) comme argument, donc cat
est inutile ici; essayez ceci:
grep git .bash_history
Commentaires
- I ' Je ne sais toujours pas comment résoudre le problème de grep,
head -c1k .bash_history
a lu les 38 premières lignes de mon fichier .bash_history. Tout était lisible - @TatakaiWasumi Quelle est la sortie de
grep -a git .bash_history
? - Cela a fonctionné! Jen ai tout ce que je voulais. Que fait
-a
? - @TatakaiWasumi
-a
faitgrep
pour traiter le fichier comme binaire. -
-a
makegrep
traiter un fichier binaire comme sil sagissait de texte.
Réponse
Vous pouvez utiliser grep -a "pattern"
.
de la page man grep :
-a, –text
Traite un fichier binaire comme sil sagissait de texte; cela équivaut à loption –binary-files = text .
Commentaires
- Cela ma aidé lors de lutilisation de lindicateur
-z
pour faire correspondre plusieurs lignes. - Cela a fonctionné pour moi, mais toujours bizarre parce que mon fichier nest ' quun fichier binaire. [grid @ serverdg2 trace] $ file listener.log listener.log: data
Réponse
Jai eu le même problème quand je veux grep mon .bash_history
. (Petite remarque: jai renommé mon historique, pour en créer un nouveau. Ce nouvel historique na pas été traité comme un binaire.)
Dans @heemayls answer, il est indiqué que grep
prend les noms de fichiers et cat
serait inutile. Ce nest pas tout à fait vrai. Depuis la page de manuel de grep
:
Si aucun fichier nest spécifié, ou si le fichier «-» est donné, grep recherche lentrée standard.
Vous pouvez donc utiliser cat
et le diriger vers grep
. Cependant, cela ne résout pas le problème que .bash_history
est traité comme un binaire. La seule bonne chose est dutiliser grep -a
(comme dans la réponse de @AK_) que vous grep
lhistorique directement ou avec cat
et un tube.
cat .bash_history | grep -a git
ou
grep -a git .bash_history
Réponse
Lerreur est due au fait que les données du fichier sont binaires, vous pouvez utiliser la commande strings pour voir la lecture humaine (ie strings
) partie que vous recherchez normalement en utilisant grep
strings data | grep -i whatever
Commentaires
- Cela ne répond pas à la première partie de la question, cest-à-dire " les causes le problème ".
Réponse
Cela peut être causé par octets nuls dans votre historique bash. La suppression des lignes avec des caractères nuls peut résoudre le problème. Vous pouvez les vérifier en utilisant le mode Perl-regexp de grep:
grep -Pa "\x00" .bash_history
Ce message a des suggestions pour les systèmes non-Unix.
file .bash_history
(file ~/.bash_history
)?.bash_history: data