web-dev-qa-db-fra.com

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

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

Le fichier binaire (entrée standard) correspond

Ma bash_history existe et contient de nombreuses lignes commençant par git.

Qu'est-ce qui a causé l'affichage de cette erreur et comment puis-je la corriger?

88
answerSeeker

Vraisemblablement, le fichier .bash_history commence par des données non textuelles, donc grep traite le fichier comme binaire. Ceci est confirmé par le file .bash_history production:

.bash_history: data 

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

head -c1K .bash_history 

Ici, je lis d'abord 1 Kio.

Vous pouvez diriger la STDOUT vers hexdump/od ou similaire.


En remarque, grep prend le (s) nom (s) de fichier comme argument, donc cat est inutile ici; essaye ça:

grep git .bash_history
12
heemayl

Vous pouvez utiliser grep -a 'pattern'.

de man grep page:

- a, --text
Traitez un fichier binaire comme s'il s'agissait de texte; c'est l'équivalent de l'option - binary-files = text .

168
AK_

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

Dans la réponse @heemayls, il est indiqué que grep prend les noms de fichiers et cat serait inutile. Ce n'est pas tout à fait vrai. Depuis la page de manuel de greps:

Si aucun fichier n'est spécifié, ou si le fichier "-" est donné, grep recherche l'entré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 d'utiliser grep -a (Comme dans la réponse de @AK_) que vous grep l'historique directement ou avec cat et un pipe.


cat .bash_history | grep -a git

ou

grep -a git .bash_history

4
SSCMuchacho

L'erreur est due au fait que les données sont binaires. Vous pouvez utiliser la commande strings pour voir la partie des chaînes que vous recherchez normalement.

strings data | grep -i whatever
0
Gajraj Singh