J'ai des fichiers binaires qui devraient être du texte (ce sont des journaux exportés), mais je ne peux pas l'ouvrir avec moins (il a l'air moche - il ressemble à un fichier binaire). J'ai trouvé que je pouvais l'ouvrir avec vi et je peux le chat (vous verrez les journaux réels), mais ce que j'aimerais vraiment faire, c'est les parcourir (sans avoir à ouvrir chacun avec vi et ensuite effectuer une recherche). Y a-t-il un moyen pour moi de faire ça?
Vous pouvez utiliser grep
de toute façon pour rechercher dans le fichier - peu importe si le fichier d'entrée est vraiment du texte ou non. De 'man grep':
-a, --text
Process a binary file as if it were text; this is equivalent to the --binary-files=text option.
--binary-files=TYPE
If the first few bytes of a file indicate that the file contains binary data, assume that the file is
of type TYPE. By default, TYPE is binary, and grep normally outputs either a one-line message saying
that a binary file matches, or no message if there is no match. If TYPE is without-match, grep assumes
that a binary file does not match; this is equivalent to the -I option. If TYPE is text, grep
processes a binary file as if it were text; this is equivalent to the -a option. Warning: grep
--binary-files=text might output binary garbage, which can have nasty side effects if the output is a
terminal and if the terminal driver interprets some of it as commands.
Veuillez marquer les mots de prudence à la fin du deuxième paragraphe. Vous voudrez peut-être rediriger les résultats de grep vers un nouveau fichier et l'examiner avec vi/less.
Dirigez-le par strings
, ce qui supprimera tout le code binaire en ne laissant que le texte.
Essayez bgrep
. ( version originale / fork plus récent )
Vous pouvez utiliser ces trois commandes:
grep -a <sth> file.txt
cat -v file.txt | grep <sth>
cat file.txt | tr '[\000-\011\013-\037\177-\377]' '.' | grep <sth>
Depuis Grep 2.21, les fichiers binaires sont traités différemment :
Lors de la recherche de données binaires, grep peut désormais traiter les octets non textuels comme des terminateurs de ligne. Cela peut augmenter considérablement les performances.
Donc, ce qui se passe maintenant, c'est qu'avec les données binaires, tous les octets non textuels (y compris les sauts de ligne) sont traités comme des terminateurs de ligne. Si vous souhaitez modifier ce comportement, vous pouvez:
utilisation --text
. Cela garantira que seules les nouvelles lignes sont des terminateurs de ligne
utilisation --null-data
. Cela garantira que seuls les octets nuls sont des terminateurs de ligne