J'ai des fichiers binaires qui devraient être du texte (ce sont des journaux exportés), mais je ne peux pas les ouvrir avec less (c'est moche - ça ressemble à un fichier binaire). J'ai trouvé que je pouvais l'ouvrir avec vi et je peux l'afficher (vous verrez les journaux réels), mais ce que j'aimerais vraiment faire, c'est les parcourir avec grep (sans avoir à ouvrir chacun d'eux avec vi et à effectuer une recherche). Existe-t-il un moyen de le faire ?
Réponses
Trop de publicités?Vous pouvez utiliser grep
de toute façon pour rechercher dans le fichier - il ne se soucie pas vraiment de savoir si le fichier d'entrée est vraiment du texte ou non. Extrait 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 noter les mises en garde à la fin du deuxième paragraphe. Vous pourriez vouloir rediriger les résultats de grep dans un nouveau fichier et l'examiner avec vi / less.
Donnez bgrep
un essai. ( version originale / bifurcation plus récente )
À partir de 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 lignes. ligne. Cela peut améliorer les performances de manière significative.
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 fins de ligne. Si vous voulez changer cela comportement, vous le pouvez :
-
utiliser
--text
. Cela permet de s'assurer que seules les nouvelles lignes sont des terminaisons de ligne. -
utiliser
--null-data
. Cela garantira que seuls les octets nuls sont des terminaisons de ligne.