grep renvoie «Correspondances fichier binaire (entrée standard)» lors de la recherche d'un modèle de chaîne dans le fichier


71

Je suis sur Ubuntu et j'ai tapé cat .bash_history | grep gitet il est retourné

Correspondance de fichier binaire (entrée standard)

Mon bash_historyexiste et il y a beaucoup de lignes qui commencent par git.

Qu'est-ce qui a provoqué l'affichage de cette erreur et comment puis-je la réparer?


Quel est le résultat de file .bash_history( file ~/.bash_history)?
— Heemayl

la sortie est.bash_history: data
— answerSeeker

pour une raison quelconque, cela se passait juste avec mes journaux apache. merci pour la période de questions
— billynoah le

Réponses:


11

Vraisemblablement, le fichier .bash_historycommence par des données non textuelles, il grepest donc traité comme un fichier binaire. Ceci est confirmé par la file .bash_historysortie:

.bash_history: data 

Vous pouvez lire quelques octets depuis le début pour avoir une vue conforme:

head -c1K .bash_history 

Ici, je lis en premier 1 KiB.

Vous pouvez diriger le STDOUT vers hexdump/ odou similaire.


En tant que note latérale, grepprend le (s) nom (s) de fichier (s) en tant qu’argument cat; il suffit de faire:

grep git .bash_history

Je ne sais toujours pas comment résoudre le problème de grep, head -c1k .bash_historylisez les 38 premières lignes de mon fichier .bash_history. Tout était lisible
— answerSeeker

2
@TatakaiWasumi Quelle est la sortie de grep -a git .bash_history?
— Heemayl

1
Ça a marché! J'ai tout ce que je voulais. Que fait -a-il?
— answerSeeker

6
@TatakaiWasumi -afait en sorte que greple fichier soit binaire.
— Heemayl

3
-amake greptraite un fichier binaire comme s'il s'agissait de texte.
— Lashgar

129

Vous pouvez utiliser grep -a 'pattern'.

de man grep page:

-a, --text
Process a binary file as if it were text; this is equivalent to the ‘--binary-files=text’ option.

Cela m’a aidé lors de l’utilisation du -zdrapeau sur plusieurs lignes.
— Stragu

Cette réponse devrait être la meilleure pour cette question.
— Michael Pacheco

Oui cette réponse est beaucoup plus appropriée!
— Daywalker

3

J'ai vu cette question aujourd'hui, parce que j'ai eu le même problème quand je veux m'engager .bash_history. (Petite remarque: j'ai renommé mon historique, de sorte qu'un nouveau a été créé. Ce nouvel historique n'a pas été traité comme un binaire.)

Dans la réponse @heemayls, il est indiqué que les grepnoms de fichiers catsont inutiles. Ce n'est pas tout à fait vrai. De la greppage de manuel de s:

Si aucun fichier n'est spécifié ou si le fichier «-» est fourni, grep recherche l'entrée standard.

Donc, vous pouvez utiliser catet le diriger vers grep. Cependant, cela ne résout pas le problème .bash_historytraité comme un binaire. La seule bonne chose à faire est d'utiliser grep -a(comme dans la réponse de @AK_) si vous utilisez grepl'historique directement ou avec catun tuyau.


cat .bash_history | grep -a git

ou

grep -a git .bash_history


Je vous remercie! Fonctionne bien pour moi
— Michael Pacheco
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.