grep renvoie “ Le fichier binaire (entrée standard) correspond à ” lorsque vous essayez de trouver un modèle de chaîne dans le fichier

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

  • Quelle est la sortie de file .bash_history (file ~/.bash_history)?
  • la sortie est .bash_history: data
  • pour une raison quelconque, cela se produisait simplement avec mes journaux Apache. Merci pour q & a
  • très étroitement liés: unix.stackexchange.com/q/19907/5510

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 fait grep pour traiter le fichier comme binaire.
  • -a make grep 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *