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?

répondeur
la source
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
très étroitement lié: unix.stackexchange.com/q/19907/5510
Trevor Boyd Smith

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
heemayl
la source
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.
AK_
la source
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

SSCMuchacho
la source
Je vous remercie! Fonctionne bien pour moi
Michael Pacheco