Sam & Max » grin http://sametmax.com Du code, du cul Sat, 07 Nov 2015 10:56:13 +0000 en-US hourly 1 http://wordpress.org/?v=4.1 Grin, le grep Python sous steroïd 11 http://sametmax.com/grin-le-grep-python-sous-steroid/ http://sametmax.com/grin-le-grep-python-sous-steroid/#comments Sat, 25 Aug 2012 16:52:53 +0000 http://sametmax.com/?p=1883 Chercher un mot dans 500 fichiers est un truc que nous, pauvres développeurs, avons besoin de faire assez souvent.

Sublime Text le fait très bien avec Maj + Ctrl + F, mais on est pas toujours dans son éditeur. La recherche dans tout le système type Spotlight est généralement bien large, et la seule solution qui ait la bonne puissance de frappe, tout en affichant plein de détails reste grep. Problème, il faut connaître un max d’options de grep, utiliser egrep pour avoir de bonnes regex, et piper la sortie pour avoir certains résultats.

Le monde de perl a trouvé depuis longtemps une solution à ce problème au travers de ack, et comme les pythonistes, c’est que des gros copieurs, ils ont fait leur version: grin.

C’est sur pypi:

pip install grin

Et ça s’utilise ainsi:

grin test

Et il va vous sortir la liste des fichiers qui contiennent “test”, et dans quel contexte, avec coloration:

Capture d'écran de la sortie du programme grin

Génial quand on est en remote sur un serveur

Grin vient avec quelques goodies en plus:

  • Récursif par défaut.
  • Ignore les dossiers .git, .svn, etc et les fichiers temporaires (~, .tmp, etc) par défaut.
  • Cherche à l’intérieur de certaines archives.
  • Très rapide.
  • Accepte une expression rationnelle Python à la place du mot à chercher !

Par exemple pour chercher uniquement les fichiers qui contiennent le mot “test” ou “tests” à la fin d’une ligne dans un fichier Python, récursivement:

~/Work $ grin tests?$ -I *.py
./archives/client/project/apps/accounts/tests.py:
   65 :     # Used in Login test
./archives/client/project/apps/grants/tests.py:
   16 : # moving settings for testing to settings_test
./archives/client/project/apps/hivtest/tests.py:
  293 :         # print updated_hivtest
./archives/client/project/apps/home/tests.py:
   15 : # moving settings for testing to settings_test
...

Le code source est simple à comprendre, et il est fait de manière modulaire de telle sorte qu’on puisse réutiliser grin comme une lib externe pour chercher des choses avec son propre programme.

]]>
http://sametmax.com/grin-le-grep-python-sous-steroid/feed/ 11