Commande équivalente aux fichiers binaires grep

24

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 -lirne fonctionne apparemment pas avec ces fichiers.

Existe-t-il une commande qui peut effectuer ce type de recherche depuis un terminal?

SpaceDog
la source

Réponses:

24

Avec GNU grep , vous pouvez utiliser l' option -a pour qu'il 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 l' -aoption, 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).

cuonglm
la source
Suis-je en train ackde mal lire la description de moi-même? (dans le manuel) "ack 2.x recherchera à travers chaque fichier régulier, non binaire qui n'est pas explicitement ignoré [par bla bla]". binaire.
Peter Cordes
1
@PeterCordes: Cela s'est produit quand aucun fichier n'a été sélectionné. Essayez ack grep /bin/grepet vous obtiendrez le résultat. J'ai mis à jour ma réponse pour éviter toute confusion.
cuonglm
1
Essayez d'utiliser la commande strings pour obtenir les chaînes de votre binaire.
Uwe Burger
23

La commande stringsva extraire toutes les données ascii d'un fichier, si vous puis grepsa sortie, vous pouvez rechercher vos données:

strings <filename> | grep "search text"
NZD
la source
Ce devrait être la réponse acceptée. Ce binaire convient parfaitement à cette tâche.
Vladislavs Dovgalecs
5
@xeon: Ce n'est pas toujours bon à utiliser strings, lisez ici pour plus de détails.
cuonglm
1
Puisque le but est de déterminer quels binaires contiennent la chaîne, ce strings -fserait plus approprié.
jamesdlin
C'est une meilleure réponse.
Xofo
9

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 aimerions peut-être obtenir les occurrences.

J'utilise souvent

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

pour obtenir un contexte environnant de 20 caractères.

JJoao
la source