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.