grep : Afficher les lignes correspondant à un motif donné
Table des matières
La commande grep est une commande Linux utilisée pour rechercher des lignes qui correspondent à un motif donné.
Cette commande fait partie de coreutils qui est disponible dans toutes les distributions Linux.
La syntaxe de la commande est la suivante :
- motif : le motif ou l'expression régulière qu'on souhaite rechercher.
- fichier... : le(s) fichier(s) dans le(s)quel(s) on souhaite effectuer la recherche.
La commande grep lit l'entrée standard si aucun fichier n'est spécifié, elle s'utilisera donc parfois sous cette forme :
Il existe des variantes zgrep, bzgrep et xzgrep qui effectuent des recherches sur des fichiers compressés respectivement par gzip, bzip2 et xz.
Par défaut, le motif recherché est affiché en couleur (généralement en rouge) lorsque le résultat s'affiche sur le terminal.
L'utilisation basique de grep où on souhaite filtrer les lignes d'un fichier :
La sortie :
On pourra utiliser grep pour filtrer la sortie standard :
A noter que grep est sensible à la casse. L'option -i pemet d'ignorer la casse :
Grâce à l'option -n, on pourra avoir le numéro de ligne dans le fichier :
Exemple :
On pourra compter aussi le nombre de lignes correspondant à la recherche avec l'option -c :
On pourra aussi rechercher de manière récursive dans un dossier et ses sous dossiers avec l'option -r :
On pourra, dans le motif de recherche utiliser des expressions régulières simples:
Cependant, dans le cas d'expressions régulières plus complexes, il sera nécessaire de préciser l'option -E (ici avec un choix entre deux expressions et choisir les lignes commençant par un U ou une barre oblique) :
Un truc intéressant, c'est l'option -v qui permet d'inverser le filtre de recherche. Je l'utilise par exemple pour afficher un fichier en excluant les commentaires (regexp vaut '^#') et les lignes vides (regexp vaut '^$') :
Enfin, dans les options que j'utilise souvent, on peut utiliser l'option -o qui n'affiche que le motif recherché dans la ligne trouvée (utile avec une Regexp).
Exemple ici, n'afficher que les adresses IPv4 du fichier hosts :
Introduction
La commande grep est une commande Linux utilisée pour rechercher des lignes qui correspondent à un motif donné.
Cette commande fait partie de coreutils qui est disponible dans toutes les distributions Linux.
La syntaxe de la commande est la suivante :
Code BASH :
grep [options] [motif] [fichier...]
- motif : le motif ou l'expression régulière qu'on souhaite rechercher.
- fichier... : le(s) fichier(s) dans le(s)quel(s) on souhaite effectuer la recherche.
La commande grep lit l'entrée standard si aucun fichier n'est spécifié, elle s'utilisera donc parfois sous cette forme :
Code BASH :
commande | grep [options] [motif]
Il existe des variantes zgrep, bzgrep et xzgrep qui effectuent des recherches sur des fichiers compressés respectivement par gzip, bzip2 et xz.
Par défaut, le motif recherché est affiché en couleur (généralement en rouge) lorsque le résultat s'affiche sur le terminal.
Utiliser grep
L'utilisation basique de grep où on souhaite filtrer les lignes d'un fichier :
Code BASH :
grep NAME /etc/os-release
La sortie :
Code BASH :
NAME="Red Hat Enterprise Linux" PRETTY_NAME="Red Hat Enterprise Linux 8.6 (Ootpa)" CPE_NAME="cpe:/o:redhat:enterprise_linux:8::baseos"
On pourra utiliser grep pour filtrer la sortie standard :
Code BASH :
lspci | grep Ethernet
A noter que grep est sensible à la casse. L'option -i pemet d'ignorer la casse :
Code BASH :
grep -i name /etc/os-release
Grâce à l'option -n, on pourra avoir le numéro de ligne dans le fichier :
Code BASH :
grep -n NAME /etc/os-release
Exemple :
Code :
1:NAME="Red Hat Enterprise Linux"
7:PRETTY_NAME="Red Hat Enterprise Linux 8.6 (Ootpa)"
9:CPE_NAME="cpe:/o:redhat:enterprise_linux:8::baseos"
On pourra compter aussi le nombre de lignes correspondant à la recherche avec l'option -c :
Code BASH :
grep -c NAME /etc/os-release
On pourra aussi rechercher de manière récursive dans un dossier et ses sous dossiers avec l'option -r :
Code BASH :
grep -r UUID /etc
On pourra, dans le motif de recherche utiliser des expressions régulières simples:
Code BASH :
grep '^U' /etc/fstab
Cependant, dans le cas d'expressions régulières plus complexes, il sera nécessaire de préciser l'option -E (ici avec un choix entre deux expressions et choisir les lignes commençant par un U ou une barre oblique) :
Code BASH :
grep -E '(^U|^/)' /etc/fstab
Un truc intéressant, c'est l'option -v qui permet d'inverser le filtre de recherche. Je l'utilise par exemple pour afficher un fichier en excluant les commentaires (regexp vaut '^#') et les lignes vides (regexp vaut '^$') :
Code BASH :
grep -E -v '(^#|^$)' /etc/fstab
Enfin, dans les options que j'utilise souvent, on peut utiliser l'option -o qui n'affiche que le motif recherché dans la ligne trouvée (utile avec une Regexp).
Exemple ici, n'afficher que les adresses IPv4 du fichier hosts :
Code BASH :
grep -Eo '^([0-9])+.([0-9])+.([0-9])+.([0-9])+' /etc/hosts