Mettre en surbrillance un élément dans un Shell

Ne vous est-il jamais arrivé d’avoir eu besoin de mettre en surbrillance un élément dans un shell suite à un « cat », un « tail », etc tout en conservant le contexte ?

Si la réponse est « oui », voici deux solutions du même acabit permettant de parvenir à vos fins :

1ère solution utilisant Perl

Nous allons définir une fonction bash nommée « hl » (pour highlight) prenant en paramètre une expression rationnelle compatible Perl (une « PCRE ») capturant l’élément à mettre en surbrillance :

user@gnusquad:~$ function hl(){ perl -pe "s/($1)/e[1;42m$1e[0m/g" ; }

Voici quelques exemples d'utilisation :

user@gnusquad:~$ echo "GNU Squad" | hl GNU
GNU Squad

user@gnusquad:~$ echo "GNU Squad" | hl S.+d
GNU Squad

root@gnusquad:~# tail -f /var/log/apache2/access.log | hl 192.168.[0-9]+.[0-9]+
192.168.0.3 - - [06/Feb/2009:22:51:18 +0100] "GET / HTTP/1.1" 304 - "http://blog.gnusquad.org/" ""

Je vous invite à lire le billet « Mettez de la couleur dans votre prompt » si vous souhaitez changer la couleur de surbrillance.

2ème solution utilisant grep

Même principe que précédemment : nous allons définir une fonction bash nommée « hl » prenant en paramètre une expression rationnelle compatible POSIX capturant l’élément à mettre en surbrillance :

user@gnusquad:~$ function hl(){ grep --color -C1000000 -E $1 ; }

Le résultat étant le même que la solution précédente, pas besoin de nouveaux exemples.

Notez cependant que cette solution est moins propre que la première à cause de l’option -C qui utilise un nombre magique (en fait celui-ci correspond au nombre de lignes à afficher avant et après le motif trouvé) mais est en contrepartie plus facile à lire…

Il ne vous reste plus qu’à mettre cette fonction dans votre fichier ~/.bashrc et le tour est joué ! :)

À lire :

Vus : 323
Publié par Sylvain : 20