L’utilitaire ack est un genre de grep
,
mais il est plutôt destiné à des programmeurs qui font des recherches
globales dans toute une arborescence.
Il s’installe facilement avec le gestionnaire de paquet.
Par défaut, il ignore les fichiers et répertoires des outils de gestion de
version (.git
, .svn
, …). On peut donc simplement faire:
$ ack toto
Cela recherche récursivement dans le répertoires courant et tous ses sous-répertoires.
Affichage
L’affichage est configurable, mais je le trouve joli par défaut.
J’ai juste ajusté les couleurs dans mon .ackrc
:
# Possible color values are: clear, reset,
# dark, bold, underline, underscore, blink, reverse, concealed
# black, red, green, yellow, blue, magenta,
# on_black, on_red, on_green, on_yellow, on_blue, on_magenta, on_cyan, on_white
--color-filename=bold
--color-match=bold red
--color-lineno=magenta
Langages
On précisant le langage, la recherche ne se fait que des les fichiers
ayant une certaine extension. Par exemple, pour ne chercher
que dans les fichiers .c
et .h
:
$ ack --cc toto
On peut aussi utiliser l’option de langage pour avoir la liste de tous les fichier correspondant :
$ ack -f --cc
On peut voir les langages prédéfinis avec :
$ ack --help-types
On a entre autres :
--[no]cc .c .h .xs
--[no]make .mk; .mak; makefile; Makefile; GNUmakefile
--[no]perl .pl .pm .pod .t; first line matches /^#!.*\bperl/
--[no]shell .sh .bash .csh .tcsh .ksh .zsh .fish; first line matches /^#!.*\b(?:ba|t?c|k|z|fi)?sh\b/
--[no]ocaml .ml .mli
On remarque que l’on peut aussi chercher dans tous les fichiers, sauf
certains, comme par exemple, tous les fichiers sauf les Makefile
:
$ ack --nomake toto
Il est facile d’ajouter un langage, c’est-à-dire de donner
un nom à un ensemble d’extensions.
J’ai par exemple ajouté dans mon .ackrc
:
--type-add=ccc:ext:c
--type-add=cch:ext:h
--type-add=t2t:ext:t2t
--type-add=ml:ext:ml
--type-add=mli:ext:mli
Expressions
Les expressions à rechercher s’exprime à l’aide d’expressions régulières Perl, et on peut construire la sortie en utilisation des sous-expressions de la recherche. Pour chercher tous les fichiers inclus par exemple :
$ ack --cc '#include\s+<(.*)>' --output '$1'
L’option -h
permet de ne pas afficher les noms de fichiers et numéros de
ligne de la provenance si on veut une liste brute.
Voir aussi :
- Afficher un pourcentage dans une page HTML
- VNC : Virtual Network Computing
- Git : déménagement d'un dépôt
- Quelques liens au sujet de l'analyse statique
- Ocaml: mon principal langage de développement
- Disque dur externe
- Les profiles dans Firefox
- Cryptographie et mail sous Android
- Quelques liens au sujet du C
- Git rebase : pour diviser un commit