grep

Auteur: Ikipou

La commande grep affiche les lignes d'un fichier lorsqu'elle contiennent un élément particulier. C'est une commande très utilisée pour la manipulation de flux de texte car elle permet de filtrer les lignes contenant l'information intéressante.

Utilisation

Pour utiliser grep, il suffit de préciser la chaine de caractère qui doit correspondre sur la ligne (le motif), suivie du ou des noms de fichiers à lire.

Par exemple, voici comment afficher tout les utilisateurs qui utilisent bash comme shell par défaut:

$ grep /bin/bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
ikipou:x:1000:1000:Benjamin Poulain:/home/ikipou:/bin/bash
postgres:x:114:114:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash

Cette commande affiche tout les lignes du fichier /etc/passwd qui contiennent la chaîne de caractères /bin/bash.

grep pour filtrer

Un exemple simple illustrera la commande lié par un pipe. Mon répertoire /usr/bin contient 2400 exécutable:

$ ls /usr/bin
[
411toppm
7zr
822-date
a2p
a2ping
... (liste très longue)

Imaginons que je désire uniquement la liste des outils Python, je peux filtrer la sortie de ls à l'aide de grep pour filtrer le mot "python":

$ ls | grep python
dh_python
python
python2.5
python2.5-config
python-config

Ceci illustre l'usage principal de grep: le filtrage des données affichée par une autre commande.

Expression régulière

Avec l'option -E, le motif est interprété comme une expression régulière.

Il existe une commande grep qui interprète systématiquement le motif comme une expression régulière: egrep. Les commande egrep et grep -E se comportent de façon identique, il s'agit d'ailleurs généralement du même exécutable.

La description du langage d'expression régulière utilisé dépasse le cadre de cette article. Néanmoins, vous pouvez toujours vous référer à la page de manuel de grep pour une description de la syntaxe.

Les options importantes

-i, --ignore-case
Ignore la casse du motif pour la correspondance.
-v
Affiche les lignes ne contenant pas le motif.
-E, --extended-regexp
Le motif est interprété comme une expression régulière. La commande se comporte comme egrep.
-B N, --before-context=N
Affiche aussi les N lignes au dessus de la correspondance.
-A N, --after-context=N
L'inverse de -B: affiche les N lignes après la correspondance.

Manuel

La page de manuel de grep fournit l'ensemble des options ainsi que la description de la syntaxe des expressions régulières.

Le trop grand empressement qu'on a de s'acquitter
d'une obligation est une espèce d'ingratitude.
-+- François de La Rochefoucauld (1613-1680), Maximes 226 -+-