Expressions Regulieres

Les expressions régulières (appelées aussi expreg, regexp, patern, motif) s’utilisent comme un filtre. Elles permettent de définir un modèle de chaînes de caractère décrivant un ensemble possible de mots ou de groupes de mots plus ou moins complexe.

Très utile pour filtrer une recherche de fichier parmi une longue liste ou les résultats des logs ou encore pour créer des règles précises dans Fail2Ban (pour ne citer que ces cas).

Utilisation (quasi) universelle des symboles

Les définitions ci-dessous sont quasiment valables pour tous les programmes et tous les langages utilisant les expressions régulières.

|       # Ou logique, l'expression située avant ou après doit apparaître : Noir|Blanc
(...) # Groupement de caractères. Exemple (vo | par)lant à la place de volant|parlant
[...] # Un caractère à cette position parmi ceux indiqués
. # (point) Un caractère quelconque
+ # Le caractère situé avant doit apparaître au moins 1 fois. "z","zz",...
* # Le caractère situé avant doit apparaître de 0 à n fois. "","s","ss",...
? # Le caractère situé avant doit apparaître une fois au plus
{n} # Le caractère situé avant doit apparaître exactement n fois
{n,} # Le caractère situé avant doit apparaître n fois ou plus
{n,m} # Le caractère situé avant doit apparaître entre n et m fois
^ # En début de chaîne
# # En fin de chaîne

Support pour les expressions régulières

Fichier words

Dans tous les Linus (ou presque) il existe un fichier words situé dans /usr/share/dict/words, c’est un lien symbolique vers /etc/dictionaries-common/words , lui même étant un lien symbolique vers /usr/share/dict/french qui n’est rien d’autre qu’un dictionnaire français.

# ls -l /usr/share/dict/
-rw-r--r-- 1 root root 976241 1 mars 2020 american-english
-rw-r--r-- 1 root root 4006449 5 mars 2020 french
[...]

Fichiers exemples

Voici plusieurs fichiers comportant des listes afin de tester les expressions régulières :

Comment utiliser les expressions régulières ?

Nous pouvons utiliser grep par exemple, mais il existe aussi sed. Les expressions régulières peuvent être également utilisées avec des langages comme php ou comme filtre dans Fail2Ban.

Commande grep

Extrait du manuel de la commande grep

# grep recherche dans les FICHIERs indiqués [...] les lignes correspondant à un certain MOTIF.
# Par défaut, grep affiche les lignes qui correspondent au motif.
# De plus, il existe deux variantes du programme : egrep et fgrep.
# egrep est identique à grep -E. (voir au chapitre des options supplémentaires)
# fgrep est identique à grep -F. (voir au chapitre des options supplémentaires)
# L'invocation directe egrep ou fgrep est déconseillée mais est fournie pour permettre à d'anciennes
# applications de pouvoir continuer à les utiliser sans avoir besoin de les modifier.

Manuel en ligne : http://www.linuxcertif.com/man/1/grep/

Les options de grep et egrep

Pour effectuer une recherche à l’aide d’une expression régulière appelée motif :

grep [Options] motif [File1...]
grep [Options] [-E motif] [File1...]

# La dernière ligne est équivalente à :
egrep 'motif' [File1...]

La commande egrep et identique à grep mais elle permet d’utiliser des expressions régulières plus complexes avec l’utilisation des symboles + , ? , | , ( , et ).

Pour utiliser grep avec l’utilisation des symboles + , ? , | , ( , ) on précisera l’option -E

Options supplémentaires

Options assez courantes d’utilisation pour faire des recherches :

grep -v     # Sélectionner les lignes sans résultat
grep -c # Retourne le nombre de lignes trouvées sans les afficher
grep -i # Ignore la casse
grep -n # Affiche le numéro de chaque ligne trouvée
grep -H # Afficher le nom du fichier pour chaque résultat
grep -l # Si fichiers multiples, indique uniquement le fichier où la ligne a été trouvée
grep -h # Si fichiers multiples, n'affiche pas le fichier où la ligne a été trouvée
grep -E # Interprète 'motif' comme une expression rationnelle étendue
grep -w # Recherche un mot entier seulement
grep -x # Recherche une phrase entière seulement
grep -An # Affiche en plus du résultat les n ligne(s) suivante(s)
grep -Bn # Affiche en plus du résultat les n ligne(s) précédente(s)
grep -Cn # Affiche en plus du résultat les n ligne(s) suivante(s) et précédente(s)

Chercher des caractères dans un fichier

Nous allons tester ici plusieurs motifs relativement simples en utilisant les caractères [ ], ^ et #. Il s’agit ici de chercher des caractères ou une suite de caractères dans un fichier.

[...]   # Un caractère à cette position parmi ceux indiqués
^ # En début de chaîne
# # En fin de chaîne

Chercher des caractères à n’importe quelle position

Pour chercher un ou plusieurs caractères à n’importe quelle position on utilise [ ].

[...]   # Un caractère à cette position parmi ceux indiqués

Par exemple [abcdefgh] cherchera le caractère a, b, c, d, e, f, g ou h n’importe où dans la ligne. Il peut aussi s’écrire de la façon suivante : [a-h] qui fera exactement la même chose

Quelques exemples

Chercher les mots contenant la lettre y. Il n’est pas nécessaire d’utiliser les crochets pour 1 seul caractère.

# grep y list-ETOILE.txt
Procyon

Chercher les mots contenant la lettre B ou C majuscules :

# grep [BC] list-ETOILE.txt
Acrux B
Alpha Centauri
Alpha Centauri B
Bellatrix
Beta Gruis
Bételgeuse
Canopus
Capella A
Capella B
Caph
Castor A
Epsilon Centauri
Eta Centauri
Gamma Cassiope

Chercher les mots contenant la lettre x ou z minuscule :

# grep [xz] list-ETOILE.txt
Acrux 1
Acrux B
Alpheratz
Bellatrix
Gacrux
Mizar A
Murzim
Pollux
Wezen

Chercher les mots contenant la lettre x minuscule ou z minuscule ou V majuscule :

grep [xzV] list-ETOILE.txt
Acrux 1 
Acrux B
Alpheratz
Bellatrix
Delta Velorum A
Gacrux
Kappa Velorum
Lambda Velorum
Mizar A
Murzim
Pollux
Véga
Wezen

Chercher les mots contenant les lettres v, w, x, y ou z ( de v à z ) :

grep [v-z] list-ETOILE.txt
Acrux 1
Acrux B
Alpha Pavonis
Alpheratz
Avior A
Bellatrix
Gacrux
Mizar A
Murzim
Pollux
Procyon
Wezen

Chercher les mots contenant les lettres H, W, v, w, x, y ou z. La notation [HWv-z] est équivalente à [HWvwxyz]

# grep [HWv-z] list-ETOILE.txt
Acrux 1
Acrux 1
Acrux B
Alpha Pavonis
Avior A
Bellatrix
Gacrux
Hadar
Hamal
Pollux
Procyon
Wei
Wezen

Chercher les mots contenant les lettres D, E, F, G, v, w, x, y ou z.La notation [D-Gw-z] est équivalente à [DEFGwxyz].

# grep [D-Gw-z] list-ETOILE.txt
Acrux 1
Acrux B
Alpheratz
Bellatrix
Beta Gruis
Delta Velorum A
Deneb
Deneb Kaitos
Denebola
Dschubba
Dubhe A
Elnath
Eltanin
Enif
EpsilonCentauri
Eta Centauri
Fomalhaut
Gacrux
GammaCassiope
Gienah
Girtab
L'Épi
Mizar A
Murzim
Pollux
Procyon
Wezen

Chercher des caractères au début

Pour chercher un ou plusieurs caractères au début on utilise ^.

^   # En début de chaîne

Quelques exemples

Chercher les mots commençant par K majuscule, quand il s’agit d’un seul caractère les crochets ne sont pas nécessaires :

# grep ^K list-ETOILE.txt
Kappa Velorum
Kaus Australis
Kochab

Chercher les mots commençant par B ou C majuscule :

# grep ^[BC] list-ETOILE.txt
Bellatrix
Beta Gruis
Bételgeuse
Canopus
Capella A
Capella B
Caph
Castor A
Caph

Chercher les mots commençant par b ou c minuscule :

# grep ^[bc] list-ETOILE.txt
(aucun résultat)

Chercher les mots commençant par un b minuscule ou un C majuscule ou un V majuscule

# grep ^[bCV] list-ETOILE.txt
Capella A
Capella B
Caph
Castor A
Véga

Chercher les mots commençant par un S, V, W, X, Y ou Z ( de S à Z)

# grep ^[S-Z] list-ETOILE.txt
Sadir
Saïph
Sargas
Scheat
Schedar
Shaula
Sirius
Soleil
Suhailal Muhlif
Véga
Wei
Wezen

Chercher les mots commençant par un I, J, K, L, V, W, X, Y ou Z. La notation [I-LV-Z] est équivalente à [IJKLVWXYZ].

# grep ^[I-LV-Z] list-ETOILE.txt
Kappa Velorum
Kaus Australis
Kochab
L'Épi
Lambda Velorum
Véga
Wei
Wezen

Chercher des caractères à la fin

Pour chercher un ou plusieurs caractères à la fin on utilise #.

#   # En fin de chaîne

La recherche s’effectue sur la fin de la LIGNE. Donc si une liste comporte des espaces ou des tabulations à la fin de chaque ligne la recherche risque de ne pas renvoyer de résultat.

Quelques exemples

Chercher les mots finissant par la lettre a

# grep a# list-ETOILE.txt
Adhara
Alhena
Aludra
Ankaa
Atria
Denebola
Dschubba
Mimosa
Phecda
Shaula
Véga

Chercher les mots finissant par B ou s

# grep [Bs]# list-ETOILE.txt
Acrux B
Alpha Pavonis
Alpha Centauri B
Antarès
Arcturus
Beta Gruis
Canopus
Capella B
Deneb Kaitos
Kaus Australis
Miaplacidus
Naos
Polaris
Régulus
Sargas
Sirius

Chercher les mots finissant par la lettre b à f. Il s’agit toujours d’un ou exclusif.

# grep [b-f]# list-ETOILE.txt
Alkaïd
Alphard
Aspidiske
Bételgeuse
Deneb
Enif
Gamma Cassiope
Girtab
Kochab
Markab
Ras Alhague
Suhailal Muhlif

Chercher les mots finissant par un B, C, D**, E, g, h, i, j ou k. La notation [B-Eg-k] est équivalente à [BCDEghijk].

# grep [B-Eg-k]# list-ETOILE.txt
Acrux B
Alioth
Alpha Centauri
Alpha Lupi
Alpha Centauri B
Capella B
Caph
Elnath
Epsilon Centauri
Eta Centauri
Gienah
L'Épi
Merak
Mirach
Mirfak
Nunki
Saïph
Wei

Chercher des caractères compris entre 2 autres

Le groupement des symboles ^[…] permettra d’effectuer une recherche au début parmi les caractères situés entre les crochets. A l’inverse […]# permettra d’effectuer une recherche à la fin

[...]   # Un caractère à cette position parmi ceux indiqués
# # En fin de chaîne
^ # En début de chaîne

Le principe est le même que vu précédemment sauf que l’on englobe la partie ‘variable’ avec des caractères définis.

Quelques exemples

Chercher des mots commençant par C, suivis d’un caractère entre e et i, lui même suivis de la lettre r. La recherche renverra entre autre Cératosaurus, Cerisier, Chrome

# grep ^C[e-i]r list-DINOSA.txt list-ARBRES.txt list-CHIMIE.txt
list-DINOSA:Cératosaurus
list-ARBRES:Cerisier à grappes
list-ARBRES:Cerisier tardif
list-ARBRES:Cerisier
list-CHIMIE:Chrome
list-CHIMIE:Cérium

Chercher des mots se terminant par n, précédé d’un caractère entre a et u, lui même précédé de la lettre m. La recherche renverra entre autre Doberman, Caiman, Saumon, Commun, Carmin.

# grep m[a-u]n# list-*
list-ANIMAU.txt:Birman
list-ANIMAU.txt:Caiman
list-ANIMAU.txt:Daman
list-ANIMAU.txt:Desman
list-ANIMAU.txt:Doberman
list-ANIMAU.txt:Saumon
list-ARBRES.txt:Epicéa commun
list-ARBRES.txt:Frêne commun
list-ARBRES.txt:Noyer commun
list-ARBRES.txt:Poirier commun
list-COULEU.txt:Carmin
list-COULEU.txt:Saumon
list-ETOILE.txt:Alderamin

Chercher des groupes de mots

Pour utiliser les parenthèses, il faut utiliser egrep ou grep avec l’option -E et mettre le motif entre guillemets. Les parenthèses étant considérées comme des expressions régulières étendues.

|       # Ou logique, l'expression située avant ou après doit apparaître : Noir|Blanc
(...) # Groupement de caractères. Exemple (vo|par)lant à la place de volant|parlant

Groupe de mot à n’importe quelle position

L’effet est le même qu’avec les crochets sauf qu’il ne s’agit plus de caractères unique comme a, k, t, ou v mais de groupe de caractères comme able, logue, ium, …

(...)   # Groupement de caractères. Exemple (vo|par)lant à la place de volant|parlant

Le symbole pipe | permet de séparer les groupes de mots et agit comme un ou logique.

Quelques exemples

Chercher les mots contenants la suite de caractères app avec grep

# grep -E app list-*
list-ARBRES.txt:Cerisier à grappes
list-ETOILE.txt:Kappa Velorum
# egrep app list-*
list-ARBRES.txt:Cerisier à grappes
list-ETOILE.txt:Kappa Velorum

Chercher les mots contenants les suites de caractères app ou rolo ou lem

# grep -E '(app|rolo|lem)' list-*
list-ANIMAU.txt:Guillemot
list-ANIMAU.txt:Guillemots
list-ANIMAU.txt:Palemon
list-ANIMAU.txt:Palemons
list-ARBRES.txt:Cerisier à grappes
list-ARBRES.txt:Pin de Wollemi
list-DINOSA.txt:Parasaurolophus
list-DINOSA.txt:Prosaurolophus
list-DINOSA.txt:Saurolophus
list-ETOILE.txt:Kappa Velorum

Chercher les mots contenants les suites de caractères ephal ou océphal ou ycéphal

# grep -E '(e|océ|ycé)phal' list-*
list-ANIMAU.txt:Cynocephale
list-ANIMAU.txt:Cynocephales
list-ANIMAU.txt:Globicephale
list-ANIMAU.txt:Globicephales
list-ANIMAU.txt:Rhynchocephale
list-ANIMAU.txt:Rhynchocephales
list-DINOSA.txt:Euoplocéphalus
list-DINOSA.txt:Ferganocephale
list-DINOSA.txt:Homalocéphale
list-DINOSA.txt:Pachycéphalosaurus
list-DINOSA.txt:Prénocéphale
list-DINOSA.txt:Tylocéphale

Groupe de mot au début

Le groupement des symboles ^(…|…|…) permettra d’effectuer une recherche au début parmi les groupes de caractères situés entre les parenthèses.

^(...)      # Rechercher au début le(s) groupe(s) de caractères contenus entre parenthèses

Le symbole pipe | permet de séparer ses groupes et agit comme un ou logique.

Quelques exemples

Chercher les mots commençant par les caractères Néo ou Opo ou Cui au début

# grep -E '^(Néo|Opo|Cui)' list-*
list-ANIMAU.txt:CCuiller
list-ANIMAU.txt:Cuillers
list-ANIMAU.txt:Opossum
list-ANIMAU.txt:Opossums
list-CHIMIE.txt:Cuivre
list-CHIMIE.txt:Néodyme
list-CHIMIE.txt:Néon
list-COULEU.txt:Cuisse de nymphe
list-COULEU.txt:Cuivre

Chercher les mots commençant par Be, lui même suivis de ll ou lon ou rna. Le résultat renvois par exemple Bellatrix, Bernacle, Belons.

# grep -E '^Be(ll|lon|rna)' list-*
list-ANIMAU.txt:Belon
list-ANIMAU.txt:Belons
list-ANIMAU.txt:Bernache
list-ANIMAU.txt:Bernaches
list-ANIMAU.txt:Bernacle
list-ANIMAU.txt:Bernacles
list-ETOILE.txt:Bellatrix

La notation ^Be(ll|lon|rna) est équivalente à ^(Bell|Belon|Berna).

Groupe de mot à la fin

Le groupement des symboles (…|…|…)# permettra d’effectuer une recherche à la fin parmi les groupes de caractères situés entre les parenthèses.

(...)#      # Rechercher à la fin le(s) groupe(s) de caractères contenus entre parenthèses

Le symbole pipe | permet de séparer ses groupes et agit comme un ou logique.

Quelques exemples

Chercher les mots finissant par unium ou gent ou gène

# grep -E '(unium|gent|gène)#' list-*
list-CHIMIE.txt:Hydrogène
list-CHIMIE.txt:Neptunium
list-CHIMIE.txt:Oxygène
list-COULEU.txt:Argent

Chercher les mots finissant par les groupes de caractères ephale ou gule ou lule

# grep -E '(epha|gu|lu)le#' list-*
list-ANIMAU.txt:Cynocephale
list-ANIMAU.txt:Fuligule
list-ANIMAU.txt:Globicephale
list-ANIMAU.txt:Mergule
list-ANIMAU.txt:Rhynchocephale
list-DINOSA.txt:Ferganocephale

La notation (epha|gu|lu)le# est équivalente à (ephale|gule|lule)#

Groupe de mot entre 2 caractères

Le groupement des symboles ^x(…|…|…)y permettra d’effectuer une recherche sur un caractère au début de chaque ligne (ici x). Ce caractère sera suivis d’un groupe de caractères parmi ceux entre parenthèses (exemple1|exemple2|exemple3) et le tout sera suivis par un autre caractère (ici y).

^x(...)y    # Recherche au début un caractère suivis d'un groupe suivi d'un caractère
x(...)y# # Recherche à la fin un caractère précédé d'un groupe précédé d'un caractère

A l’inverse le groupement des symboles x(…|…|…)y# permettra d’effectuer une recherche sur un caractère en fin de ligne (ici x). Ce caractère sera précédé d’un groupe de caractères parmi ceux entre parenthèses (exemple4|exemple5|exemple6) et le tout sera précédé par un autre caractère (ici y).

Quelques exemples

Chercher des mots commençant par M, suivis des caractères an, en ou on, eux même suivis de la lettre d. La recherche renverra par exemple Mandarin, Mendélévium ou Mandarine.

# grep -E '^M(an|en|on)d' list-*
list-ANIMAU.txt:Mandarin
list-ANIMAU.txt:Mandarins
list-ANIMAU.txt:Mandrill
list-ANIMAU.txt:Mandrills
list-ANIMAU.txt:Mendole
list-ANIMAU.txt:Mendoles
list-ANIMAU.txt:Mondain
list-ANIMAU.txt:Mondains
list-ARBRES.txt:Mandarinier
list-CHIMIE.txt:Mendélévium
list-COULEU.txt:Mandarine

Chercher des mots commençant par B, suivis des caractères la ou ra suivis des lettres nc. La recherche renverra par exemple Blanc, Blanchets, Branchiopodes

# grep -E '^B(la|ra)nc' list-*
list-ANIMAU.txt:Blanchet
list-ANIMAU.txt:Blanchets
list-ANIMAU.txt:Blanchon
list-ANIMAU.txt:Blanchons
list-ANIMAU.txt:Branchiopode
list-ANIMAU.txt:Branchiopodes
list-COULEU.txt:Blanc

La notation ^B(la|ra)nc est équivalente à ^(Bla|Bra)nc et à ^B(lanc|ranc) ainsi qu’à ^(Blanc|Branc).

Utilisation de +, *, ., {n}, {n, } et {n,m}

Nous allons tester ici les caractères suivants :

.       # Un caractère quelconque
+ # Le caractère placé avant doit apparaître de 1 à n fois. "z","zz",...
* # Le caractère situé avant doit apparaître de 0 à n fois. "","s","ss",...
? # Le caractère situé avant doit apparaître 0 ou 1 fois
{n} # Le caractère situé avant doit apparaître exactement n fois
{n,} # Il apparaît n fois ou plus
{n,m} # Il apparaît entre n et m fois

Utilisation du point “ . “

Le point remplace n’importe quel caractère - et un seul - dans le motif.

.       # Un caractère quelconque

Le point est une sorte de ‘joker’

Quelques exemples

Chercher des mots avec la lettre a, suivit d’un caractère ( et un seul ) suivit lui même par im. L’espace est considéré comme un caractère c’est pour cette raison que le résultat affiche Paulownia impérial.

# grep -E 'a.im' list-*
list-ARBRES.txt:Paulownia impérial
list-DINOSA.txt:Pélécanimimus

Chercher des mots contenant la, suivit d’un caractère ( et un seul ) suivit lui même par in. Lapin n’apparaît pas dans les résultats car il commence par une majuscule.

# grep -E 'la.in' list-*
list-ANIMAU.txt:Thylacine
list-ANIMAU.txt:Thylacines
list-CHIMIE.txt:Platine
list-COULEU.txt:Platine

Chercher les mots se terminant par un caractère, n’importe lequel, précédé de Canar

# grep -E 'Canar.'# list-*
list-ANIMAU.txt:Canard
list-ANIMAU.txt:Canari
list-COULEU.txt:Canard
list-COULEU.txt:Canari

Si on se met pas le symbole # indiquant la fin, le résultat se traduit par : Chercher un mot commençant par Canar, suivis d’une lettre au minimum

# grep -E 'Canar.' list-*
list-ANIMAU.txt:Canard
list-ANIMAU.txt:Canardeau
list-ANIMAU.txt:Canardeaux
list-ANIMAU.txt:Canards
list-ANIMAU.txt:Canari
list-ANIMAU.txt:Canaris
list-COULEU.txt:Canard
list-COULEU.txt:Canari

Autre exemple pour mieux comprendre : Chercher un mot commençant par Canard, suivis d’une lettre au minimum

# grep -E 'Canard.' list-*
list-ANIMAU.txt:Canardeau
list-ANIMAU.txt:Canardeaux
list-ANIMAU.txt:Canards

Chercher des mots contenant nil, précédé d’un caractère ( et un seul )

# grep -E '.nil' list-*
list-ANIMAU.txt:Echenilleur
list-ANIMAU.txt:Echenilleurs
list-COULEU.txt:Aniline
list-COULEU.txt:Vanille
list-ETOILE.txt:Alnilam

Chercher des mots contenant nil, précédé d’un caractère ( et un seul ) au début

# grep -E ^'.nil' list-*
list-COULEU.txt:Aniline

La notation .nil n’est pas équivalente à [A-Za-Z]nil. Cette dernière notation exige que nil précède obligatoirement un caractère compris entre A-Z ou a-Z alors que le point non (Il peut y avoir un espace par exemple). Voir le chapitre ci dessous pour plus d’explication.

Utilisation du ‘+’

Permet, par exemple de chercher une occurrence d’un caractère.

+   # Le caractère placé avant doit apparaître de 1 à n fois. "z","zz","zzz"

La notation s+ cherchera les mots comportant 2 ‘s

Quelques exemples

On cherche des mots où la lettre s apparaît au moins une fois :

# grep -E 's+um' list-*
list-ANIMAU.txt:Opossum
list-ANIMAU.txt:Opossums

Pour faire la comparaison utilisons la même commande mais avec un point :

# grep -E 's.um' list-*
list-ANIMAU.txt:Opossum
list-ANIMAU.txt:Opossums
list-CHIMIE.txt:Dysprosium
list-CHIMIE.txt:Hassium
list-CHIMIE.txt:Magnésium
list-CHIMIE.txt:Potassium

Le point prend n’importe quel caractère, le + quand à lui cherche une ou plusieurs fois le caractère situé avant, ici c’est la lettre s

Utilisation de l’étoile *

Utilisation de l’étoile

*   # Le caractère situé avant doit apparaître de 0 à n fois. "","s","ss",...

Voir les exemples ci dessous.

Quelques exemples

On cherche des mots où la lettre s apparaît de zéro à n fois précédé des caractères um. Le résultat renvois Lumps, Megatherium, Megatheriums, Opossum, Opossums, Paumier.

# grep -E 's*um' list-*
[...]
list-ANIMAU.txt:Lumps
list-ANIMAU.txt:Megatherium
list-ANIMAU.txt:Megatheriums
list-ANIMAU.txt:Opossum
list-ANIMAU.txt:Opossums
list-ANIMAU.txt:Paumier
[...]

Le résultat ci dessus à été tronqué.

Utilisation du point d’interrogation ?

Utilisation du point d’interrogation.

?   # Le caractère situé avant doit apparaître 0 ou 1 fois

Quelques exemples

On cherche des mots où la lettre s apparaît de zéro à 1 fois précédé des caractères um. Le résultat renvois Lump, Lumps, Megatherium, Megatheriums, Opossum, Opossums, Paumier

# grep -E 's?um' list-*
[...]
list-ANIMAU.txt:Lump
list-ANIMAU.txt:Lumps
list-ANIMAU.txt:Megatherium
list-ANIMAU.txt:Megatheriums
list-ANIMAU.txt:Opossum
list-ANIMAU.txt:Opossums
list-ANIMAU.txt:Paumier
[...]

Le résultat ci dessus à été tronqué.

Utilisation de {n}

Utilisation de n pour préciser une quantité d’occurrence.

{n}     # Le caractère situé avant doit apparaître exactement n fois

Avec s{2} la lettre s devra apparaître 2 fois.

Quelques exemples

Chercher des mots avec la lettre e qui se répète 5 fois suivi par les lettres re

# grep -E 'e{5}re' EROR-list.txt
Wheeeeere are theem ? Wheeeeere are my dragons ?!?!

Peut être utile dans la pratique pour repérer les espaces en trop dans les textes ou les codes sources…

Utilisation de {n, }

Utilisation de n pour préciser une quantité minimum d’occurrence.

{n,}    # Il apparaît n fois ou plus

Avec s{2,} la lettre s devra apparaître minimum 2 fois.

Quelques exemples

Chercher des mots avec la lettre e qui se répète de 3 à n fois et se termine par re

# grep -E 'e{3,}re' EROR-list.txt
Wheeere are theem ? Wheeere are my dragons ?!?!
Wheeeere are theem ? Wheeeere are my dragons ?!?!
Wheeeeere are theem ? Wheeeeere are my dragons ?!?!

Peut être utile dans la pratique pour repérer les espaces en trop dans les textes ou les codes sources…

Utilisation de {n,m}

Utilisation de n et m pour préciser une quantité d’occurrence comprise entre 2 nombres.

{n,m}      # Il apparaît entre n et m fois

Avec s{2,5} la lettre s devra apparaître entre 2 et 5 fois.

####7.7.1 Quelques exemples
Chercher des mots avec la lettre e qui se répète de 2 à 4 fois et se termine par re

# grep -E 'e{2,4}re' EROR-list.txt
Wheere are theem ? Wheere are my dragons ?!?!
Wheeere are theem ? Wheeere are my dragons ?!?!
Wheeeere are theem ? Wheeeere are my dragons ?!?!

Expressions régulières complexes

J’entends par ‘complexes’ des expressions composées de nombreuses contraintes comme on pourrait le voir dans les filtres de Fail2ban ou dans les scripts php pour vérifier la validité d’une adresse mail.
La suite de l’article comporte des exemples
Chercher les lignes comportant des mots commençant par Y suivis de 1 ou plusieurs caractères eux(lui) même(s) suivis de m. La lettre m n’est pas forcément la lettre finale.

# grep -E 'Y.{1,}m' list-*
list-CHIMIE.txt:Ytterbium
list-CHIMIE.txt:Yttrium
list-DINOSA.txt:Yamaceratopsdorngobiensis
list-DINOSA.txt:Yuanmousaurus

Chercher les lignes comportant des mots commençant par Y suivis de 1 ou plusieurs caractères eux(lui) même(s) suivis de m. La lettre m est la lettre finale.

# grep -E 'Y.{1,}m#' list-*
list-CHIMIE.txt:Ytterbium
list-CHIMIE.txt:Yttrium

Suite : Soon

Documentation

http://rexludex.free.fr/HTM/Liste_de_couleurs.htm

> Partager <