web-dev-qa-db-fra.com

Commande équivalente aux fichiers binaires grep

J'ai un tas de binaires et je sais qu'à l'intérieur de ces binaires il y a des chaînes que je veux trouver.

Je veux faire un:

grep -lir "the string I am looking for"

et obtenir une liste de tous les fichiers binaires dans un répertoire particulier qui contiennent cette chaîne, mais grep -lir ne fonctionne apparemment pas avec ces fichiers.

Existe-t-il une commande qui peut effectuer ce type de recherche à partir du terminal?

26
SpaceDog

Avec GNU grep , vous pouvez utiliser l'option - a pour qu'elle traite les fichiers binaires comme des fichiers texte:

grep -ALi -- string file

Si votre version grep ne prend pas en charge -a, vous pouvez utiliser ack à la place. Avec ack 1.x, vous devez inclure -a option, avec ack 2.x, vous ne le faites pas, car lors de la recherche, inclure un fichier non texte par défaut (ignoré uniquement le fichier non texte lorsque vous n'avez spécifié aucun fichier).

26
cuonglm

La commande strings va extraire toutes les données ascii d'un fichier, si vous grep sa sortie, vous pouvez rechercher vos données:

strings <filename> | grep "search text"
26
NZD

Votre question concerne la recherche de fichiers binaires contenant un motif (et nous avons déjà de très bonnes réponses!). Complémentaire, nous pouvons aimer obtenir les occurrences.

J'utilise souvent

grep -aPo '.{0,20}pattern.{0,20}'  binfile

pour obtenir un contexte environnant de 20 caractères.

9
JJoao