Il arrive que nous ayons besoin d’extraire des adresses emails de fichiers quelconques. Lorsqu’il s’agit de fichiers texte, cette opération est relativement simple, mais lorsqu’il s’agit d’autres types de fichiers, cela oblige souvent à d’autres manipulations plus longues. Par exemple si nos adresses sont sur un vieux serveur sql qui ne fonctionne plus et sur lequel nous n’avons pas de fichier .sql, la tâche peut être longue ou alors on peut avoir ce besoin sans pour autant s’y connaître en SQL. Or le shell peut une fois de plus nous éviter pas mal de traquas grâce à la combinaison de 2 commandes : la commande strings et la commande grep.
La commande strings permet de sortir sur la console les caractères affichables d’un fichier ou d’un flux, et ce même lorsqu’il s’agit d’un fichier binaire par exemple.
La commande grep quant à elle s’utilise comme un filtre, elle permet d’afficher ou de ne pas afficher une chaînes de caractères déterminée ou encore une expression régulière.
C’est la combinaison de ces 2 commandes qui nous permet d’extraire ce dont nous avons besoin sans difficulté. Pour cela il suffit de lancer :
strings cheminversvotrebase/* |grep -Eio ‘([[:alnum:]_.-]+@[[:alnum:]_.-]+?\.[[:alpha:].]{2,6})’|sort -u
Cette commande va parser tous les fichiers de votre base MySQL et en extraire les emails, sans avoir à s’y connecter. Exemple :
strings /var/lib/mysql/mabase/* |grep -Eio ‘([[:alnum:]_.-]+@[[:alnum:]_.-]+?\.[[:alpha:].]{2,6})’|sort -u
J’ai également testé avec succès cette méthode sur des bases de données postgresql :
strings /var/lib/pgsql/data/base/19981/* grep -Eio ‘([[:alnum:]_.-]+@[[:alnum:]_.-]+?\.[[:alpha:].]{2,6})’|sort -u