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 (ça a l'air moche - ça ressemble à un fichier binaire). J'ai trouvé que je pouvais l'ouvrir avec vi et que je pouvais le chatter (vous verrez les journaux réels), mais ce que j'aimerais vraiment faire, c'est passer par eux (sans avoir à ouvrir chacun d'eux avec vi et ensuite exécuter une recherche). Y a-t-il un moyen pour moi de faire ça?
76
grep -a
?Réponses:
Vous pouvez
grep
quand même utiliser la recherche dans le fichier - le fait que le fichier d’entrée soit réellement textuel n’a aucune importance. De 'homme grep':Veuillez marquer les mots d'avertissement à la fin du deuxième paragraphe. Vous voudrez peut-être rediriger les résultats de grep dans un nouveau fichier et l'examiner avec vi / less.
la source
Transférez-le
strings
, ce qui supprimera tout le code binaire, ne laissant que le texte.la source
strings
apparemment ne comprend pas utf-8 is text.Donnez
bgrep
un essai. ( version originale / fourche plus récente )la source
\x
ne fonctionne pas vraiment comme icigrep -P "\x05\x00\xc0" mybinaryfile
.bgrep "fafafafa" test_27.6.2015.bin |less
mais reçois test_27.6.2015.bin: 00005ee4 . Je supposerais obtenir fafafafa , puisque je cherchais ceci. Pas de manuel chez l'homme. Une idée pourquoi une telle sortie?grep -a
?bash: bgrep: command not found...
etNo package bgrep available
.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>
la source
À partir de Grep 2.21, les fichiers binaires sont traités différemment :
Donc, ce qui se passe maintenant, c'est qu'avec les données binaires, tous les octets non textuels (y compris les nouvelles lignes) sont traités comme des terminateurs de ligne. Si vous souhaitez modifier ce comportement, vous pouvez:
utiliser
--text
. Cela garantira que seules les nouvelles lignes sont des terminateurs de ligneutiliser
--null-data
. Cela garantira que seuls les octets nuls sont des terminateurs de lignela source