Jai un tas de binaires et je sais quà linté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 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 permettant deffectuer ce type de recherche depuis le terminal?
Réponse
Avec GNU grep , vous pouvez utiliser loption -a pour quelle 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 loption -a
, avec ack 2.x, vous ne le faites pas, car lors de la recherche, incluez un fichier non texte par défaut (uniquement ignoré non- fichier texte alors que vous n’avez spécifié aucun fichier).
Commentaires
Réponse
La commande strings
va extraire activez toutes les données ascii dun fichier, si vous grep
sa sortie, vous pouvez rechercher vos données:
strings <filename> | grep "search text"
Commentaires
- Cela devrait être la réponse acceptée. Ce binaire convient parfaitement à cette tâche.
- @xeon: ' nest pas toujours bon à utiliser
strings
, lisez ici pour plus de détails. - Le but étant de déterminer quels binaires contiennent la chaîne,
strings -f
serait plus approprié. - Cest une meilleure réponse.
- la meilleure réponse. merci beaucoup
Réponse
Votre question concerne la recherche de fichiers binaires contenant un modèle (et nous avons déjà très bonnes réponses!). En complément, nous souhaitons peut-être obtenir les occurrences.
Jutilise souvent
grep -aPo ".{0,20}pattern.{0,20}" binfile
pour obtenir un contexte environnant de 20 caractères.
ack
'? (dans le manuel) " ack 2.x recherchera dans tous les fichiers normaux non binaires qui ne le sont pas explicitement ignoré [par bla bla] " On dirait donc que ack 2.x devrait quand même arrêter de lire un fichier prématurément si le contenu semble binaire.ack grep /bin/grep
et vous obtiendrez le résultat. Jai mis à jour ma réponse pour éviter toute confusion.