Installé avec le paquet grep
Remarques :
- Par défaut, grep recherche une expression régulière basique, c’est à dire dont les caractères suivants doivent être échappés pour retrouver une signification particulière : \? \+ \( \) \| \{ et \}.
- Avec l’option -E, elle recherche une expression régulière étendue, c’est à dire dont les caractères suivants ont une signification particulière : ? + ( ) | { et }.
- Expressions régulières basique et étendue (man 7 regex) sont à distinguer des Wildcards ou Globbing patterns (man 7 glob) utilisés par la plupart des commandes shell
regexp basique |
[…] | ensemble | |
[^…] | ensemble exclu | ||
[x-y] | intervalle | ||
. | n’importe quel caractère | ||
répétition | * | zéro ou plus | |
+ | un ou plus | ||
? | zéro ou un | ||
{n} | n fois | ||
{n,m} | de n à m fois | ||
regexp étendue |
| | ou logique | |
(…) | sous-section | ||
ligne | ^ | début | |
$ | fin |
Afficher la version de la commande grep
apt-cache policy grep
ou
grep --version
Rechercher un motif dans un ou plusieurs fichiers
Le motif est une expression régulière basique (ERb, BRE ou Expression Rationnelle)
grep -e "pattern" filenames
ou
grep "pattern" filenames
Comportement par défaut de la commande grep.
Le motif est une expression régulière étendue (ERe ou ERE)
grep -E "pattern" filenames
ou
egrep "pattern" filenames
Rechercher plusieurs motifs dans un ou plusieurs fichiers
grep -e "pattern1" -e "pattern2" filenames
Coloriser un motif trouvé
grep --colour "pattern" filenames
Rechercher un motif sans respect de la casse
grep -i "pattern" filenames
L’option -e est implicite.
Rechercher des motifs listés dans un fichier référence
grep -f reffilename filenames
Si reffilename contient des ERb.
egrep -f reffilename filenames
Si reffilename contient des ERe.
ex :
Avec listing.txt contenant :
^[[:upper:]] (Vivamus) [[:digit:]]
# grep -f listing.txt file*
file1.txt:Curabitur ullamcorper ultricies nisi.cCras dapibus.
file1.txt:(Vivamus) elementum semper nisi.
file3.txt:Aenean commodo ligula eget dolor.
file3.txt:Vivamus elementum semper nisi.
file3.txt:Aenean vulputate eleifend tellus.
file3.txt:Phrase 7 : curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo.
Ci-dessus, le résultat de : commence par une lettre majuscule, ou contient le terme (Vivamus) ou contient un chiffre.
Afficher les lignes non vides d’un fichier
grep -v "^$" filenames
L’option -v permet d’inverser le résultat. On recherche les lignes vides puis on inverse pour obtenir les lignes non vides.
Afficher le contenu d’un fichier sans les commentaires
grep -v -E "^[[:space:]]*#|^;" filename
Afficher le contenu d’un fichier sans les commentaires ni les lignes vides
grep -v -E "^[[:space:]]*#|^;|^$" filename
Rechercher une occurrence exacte d’un mot
grep -w "word" filenames
Afficher N lignes avant (Before) l’occurrence trouvée
grep -B N "pattern" filenames
Afficher N lignes après (After) l’occurrence trouvée
grep -A N "pattern" filenames
Afficher N lignes avant (Before) et N lignes après (After) l’occurrence trouvée
grep -C N "pattern" filenames
Equivaut à :
grep -B N -A N "pattern" filenames
Recherche récursive
grep -r "pattern" directory
Compter le nombre de résultats sans les afficher
grep -c "pattern" filenames
ex :
# grep -c "^$" file1.txt
13
Equivaut à :
# grep "^$" file1.txt | wc -l
Afficher uniquement le nom des fichiers où l’occurrence a été trouvée
grep -l "pattern" filenames
Afficher uniquement l’occurrence trouvée et non la ligne complète
grep -o "pattern" filenames
Afficher la position en nombre de caractères de l’occurrence trouvée
grep -b "pattern" filenames
La position des caractères commence à 0 pour le premier caractère du fichier.
ex :
# grep -b "Curabitur" file1.txt
95:Curabitur ullamcorper ultricies nisi. Cras dapibus.
Afficher le numéro de ligne où se trouve l’occurrence trouvée
grep -n "pattern" filenames
ex :
# grep -n "Curabitur" file1.txt
3:Curabitur ullamcorper ultricies nisi. Cras dapibus.
Rechercher une URL dans un fichier
grep -o "http://[^[:space:]]*.\(fr\|priv\|org\)" file*
file15.txt:http://snipeit.opensharing.priv file1.txt:http://www.opensharing.fr file2.txt:http://debian.org
Exécuter grep en sortie de la commande find
find path -type f -print0 | xargs -0 grep "pattern"
ex :
# find . -type f -print0 | xargs -0 grep "Curabitur"
./file1.txt:Curabitur ullamcorper ultricies nisi.
./file1.txt:Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo.
./file3.txt:Curabitur ullamcorper ultricies nisi.
./file3.txt:Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo.
find path ! -regex ".*/\..*" -print0 | xargs -0 grep "pattern"
Cette dernière commande exclura les fichiers et dossiers cachés du résultat.
Afficher les logs relatifs à un service particulier depuis les logs système
grep --colour -E "service" /var/log/syslog
ex :
# grep --colour -E "named" /var/log/syslog [...] Jul 16 23:51:44 dns1-test named[487]: zone 1.168.192.in-addr.arpa/IN/internal: loaded serial 2016061909 Jul 16 23:51:44 dns1-test named[487]: zone opensharing.priv/IN/internal: loaded serial 2016061914 Jul 16 23:51:44 dns1-test named[487]: zone 255.in-addr.arpa/IN/internal: loaded serial 1 Jul 16 23:51:44 dns1-test named[487]: zone localhost/IN/internal: loaded serial 2 Jul 16 23:51:44 dns1-test named[487]: all zones loaded Jul 16 23:51:44 dns1-test named[487]: running [...]
Différences entre ERb et ERe
La synthèse qui suit est reprise du site Mon pense-bête de Ronan Quennec.
Les ERb ou Expressions Régulières basiques
Elles sont utilisées, entre autres, par les commandes suivantes : vi, grep (avec ou sans l’option -e), expr, sed, etc.
Caractère spécial | Signification |
\{n\} | n fois le caractère précédent |
\{n,\} | Au moins n fois le caractère précédent |
\{n,x\} | Entre n et x fois le caractère précédent |
\(ERb\) | Mémorisation d’une ERb |
\1, \2, … | Rappel de mémorisation |
Dans les ERB, le caractère « \ » donne une signification spéciale aux parenthèses et accolades.
Exemples :
Expression Régulière basique | Signification |
\-[A-Z]\{2\}\- | Chaine contenant un mot de 2 lettres majuscules entouré par des tirets (-)BOUCHES-DU-RHONEEURE-ET-LOIRVAL-DE-MARNE |
Les ERe ou Expressions Régulières étendues
Elles sont utilisées, entre autres, par les commandes suivantes : grep (avec l’option -E), awk, etc.
Caractère spécial | Signification |
? | 0 ou 1 fois le caractère ou regroupement précédent |
+ | 1 à n fois le caractère ou regroupement précédent |
{n} | n fois le caractère ou regroupement précédent |
{n,} | Au moins n fois le caractère ou regroupement précédent |
{n,x} | Entre n et x fois le caractère ou regroupement précédent |
(er1) | Regroupement |
er1 | er2 | er3 | Alternatives |
Dans les ERe, les accolades et parenthèses perdent leur signification spéciale si elles sont précédées d’un antislash.
Exemples :
Expression Régulière étendue | Signification |
^[+-]?[0-9]+$ | Chaine représentant un nombre entier d’au moins 1 chiffre précédé éventuellement du signe + ou –2-56+235789654 |
\([a-zA-Z]{3}\) | Chaine contenant 3 lettres minuscules et/ou majuscules et entourés de parenthèses.HERBIERS (Les) Herbiers |
\([-a-zA-Z _]{4,}\) | Chaine contenant au moins 4 caractères composées de lettres minuscules et/ou majuscules, de tiret (-), d’espace et de tiret bas (_) et le tout entouré de parenthèses.1er (Ouest)CASTILLON (CANTON DE LEMBEYE)2e (Nord-Ouest) |
^41|yotte$ | Chaine commençant par « 41 » ou finissant par « yotte »41 57 57463 3 MOSELLE Moselle41 88 88160 4 VOSGES Vosges06 976 97608 0 MAYOTTE Mayotte |
(in|re)+ | Chaine composée de 1 à n occurences de « in » ou de « re » (en minuscule)FinistèreIndre-et-LoireMartinique |
Les caractères communs aux ERb et ERe
Caractère spécial | Signification |
^ | Début de ligne |
$ | Fin de ligne |
. (point) | Un caractère quelconque |
[liste_de_caractères] | Un caractère cité dans la liste |
[^liste_de_caractères] | Un caractère qui n’est pas cité dans la liste |
* | 0 à n fois le caractère ou regroupement précédent |
\<expression | Début d’un mot. Caractères pouvant faire partie d’un mot : [A-Za-z0-9_] |
expression\> | Fin d’un mot |
\<expression\> | Mot complet |
\c | Protection du caractère spécial « c »/td> |
Exemples :
Les expressions « space » et « tab » représentent les touches [espace] et [tabulation].
La tabulation est représentée par les caractères « \t ».
Expression Régulière | Signification |
soleil | Chaine contenant « soleil ».Aujourd’hui il y a du soleil, mais demain il pleut !soleil toujours.Passer ses vacances au soleil. |
^soleil | Chaine commençant par « soleil ».soleil toujours. |
soleil$ | Chaine se terminant par « soleil ».Passer ses vacances au soleil. |
^[A-Z][5-9].$ | Chaine composée de 3 caractères.Le premier est une majuscule, le second est un chiffre entre 5 et 9 et le dernier un caractère quelconque.B6zZ5* |
^$ | Chaine vide (aucun caractère entre ^ et $) |
^[space tab]*$ | Chaine contenant entre 0 et n caractères espace ou tabulation |
7space[0-79]A* | Chaine contenant le chiffre 7, suivi d’un espace, suivi de n’importe quel chiffre sauf 8, suivi de la lettre A 0 à n fois.x7 6abc7 9Axy7 1AAAAAAAAAAAAAAAAbfgddghjgdhj |
[0-9][^A-Z_]$ | Chaine dont l’avant dernier caractère est un chiffre et le dernier n’est ni une lettre majuscule ni un caractère souligné.AZER1a3*440008b |
\<tout | Chaine contenant un mot commençant par « tout ».bonjour tout le mondeil faut dire toutefoisNon correspondance : partout dans le monde |
\<tout\> | Chaine contenant le mot « tout ».bonjour tout le mondeNon correspondance : partout dans le monde. il faut dire toutefois |
[0-9][0-9]\.[0-9] | Chaine contenant 2 chiffres suivi du caractère . (point) suivi d’un chiffre.4576.45 |
Les classes de caractères
[[:alnum:]] toutes les lettres et les chiffres [[:alpha:]] toutes les lettres [[:lower:]] toutes les lettres minuscules [[:upper:]] toutes les lettres majuscule [[:digit:]] tous les chiffres [[:graph:]] tous les caractères imprimables ( [:alnum:] + [:punc:] ), sauf les blancs ( [:space:] ) [[:print:]] tous les caractères imprimables, y compris les blancs horizontaux ( [:alnum:] + [:punc:] + [:blank:] ) [[:blank:]] tous les blancs horizontaux (espaces et tabulations \t) [[:space:]] tous les blancs verticaux (saut de ligne \n, retour chariot \r, tabulation verticale \v) et horizontaux (espaces et tabulations \t) [[:punct:]] tous les caractères de ponctuation (" # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~.) [[:xdigit:]] tous les chiffres hexadécimaux [[:cntrl:]] tous les caractères de contrôle (donc y compris \r, \n, \t et \v)