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?
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
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 .
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 grep
s:
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
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