Expressions régulières sed et grep - Tutoriel linux

Mise à jour : Debian 11.2 - Bullseye

Références :

Sommaire

1 - Principe

1.1 - Expressions régulières

^          Motif en début de ligne

$ Motif en fin de ligne

. Remplace un caractère quelconque
* Caractère précédent présent 0 ou plusieurs fois, équivalent à {0,}

[liste] Remplace un caractère de la liste

[[:classe:]] Remplace un caractère de la classe

[^liste] Remplace un caractère n'appartenant pas à la liste

[^[:classe:]] Remplace un caractère n'appartenant pas à la classe
[[:alnum:]]  [[:cntrl:]]  [[:lower:]]  [[:space:]]
[[:alpha:]]  [[:digit:]]  [[:print:]]  [[:upper:]]
[[:blank:]]  [[:graph:]]  [[:punct:]]  [[:xdigit:]]
\w Remplace un caractère de la liste (a-zA-Z0-9-_)
\W      Remplace un caractère absent de la liste (a-zA-Z0-9-_)

\s Remplace un caractère de la classe espace (espace ou tabulations ou nouvelle ligne)
\S Remplace un caractère absent de la classe espace

1.2 - Expressions régulières étendues

?          Caractère précédent existe 0 ou 1 fois, équivalent à {,1}

+ Caractère précédent existe au moins 1 fois, équivalent à {1,}

{x} Caractère précédent existe x fois
{x,y} Caractère précédent existe entre x et Y fois

| L'un ou l'autre des motifs avant et après le symbole

() Regroupement, par exemple (motif1|motif2){x}

\bmotif motif est le début d'un nouveau mot

motif\b motif est la fin d'un nouveau mot

\Bmotif motif n'est pas le début d'un nouveau mot

motif\B motif n'est pas la fin d'un nouveau mot

1.3 - Utilisation

$ echo "ceci est un test ext regex" |grep '^ceci' --colour
ceci est un test ext regex

$ echo "ceci est un test ext regex" |sed -n '/^ceci/p'
ceci est un test ext regex
$ echo "ceci est un test ext regex" |grep -E 'tes?t' --colour
ceci est un test ext regex

$ echo "ceci est un test ext regex" |sed -E -n '/tes?t/p'
ceci est un test ext regex
$ echo "ceci est un test ext regex" |sed -n '/tes\?t/p'
ceci est un test ext regex

$ echo "ceci est un test ext regex" |grep -o 'tes\?t'
test

1.4 - Échappement

$ echo "test []" |grep -o "\[]"
[]

2 - Exemples

2.1 - Position du motif

2.1.1 Motif au début de la ligne

$ echo "RegexExtRegex"|grep  '^Regex' --colour
RegexExtRegex

2.1.2 Motif situé en fin de ligne

$ echo "RegexExtRegex"|grep  'Regex$' --colour
RegexExtRegex

2.1.3 Motif situé en début de mot

$ echo "RegexExtRegex"|grep  '\bRegex' --colour
RegexExtRegex

2.1.4 Motif situé en fin de mot

$ echo "RegexExtRegex"|grep  'Regex\b' --colour
RegexExtRegex

2.1.5 Motif non situé en début de mot

$ echo "RegexExtRegex"|grep  '\BExt' --colour
RegexExtRegex

2.1.6 Motif non situé en fin de mot

$ echo "RegexExtRegex"|grep  'Ext\B' --colour
RegexExtRegex

2.2 - Remplacement d'un caractère

2.2.1 Remplacement par n'importe quel caractère

$ echo "Ext ExT ExG Ex Ex1"|grep  'x.' --colour
Ext ExT ExG Ex Ex1

2.2.2 Remplacement par un caractère d'une liste

$ echo "Ext ExT ExG Ex Ex1"|grep  'x[tG1]' --colour
Ext ExT ExG Ex Ex1
$ echo "Ext ExT ExG Ex Ex1"|grep  'x[A-Z]' --colour
Ext ExT ExG Ex Ex1

2.2.3 Remplacement par un caractère n'appartenant pas à une liste

$ echo "Ext ExT ExG Ex Ex1"|grep  'x[^tG1]' --colour
Ext ExT ExG Ex Ex1

2.2.4 Remplacement par un caractère appartenant à une classe

$ echo "Ext ExT ExG Ex Ex1"|grep  'x[[:lower:]]' --colour
Ext ExT ExG Ex Ex1
$ echo "Ext ExT ExG Ex Ex1"|grep  'x[[:space:]]' --colour
Ext ExT ExG Ex Ex1

2.2.5 Remplacement par un caractère n'appartenant pas à une classe

$ echo "Ext ExT ExG Ex Ex1"|grep  'x[^[:alpha:]]' --colour
Ext ExT ExG Ex Ex1

2.3 - Répétitions du caractère précédent

2.3.1 Répétition du caractère précédent un nombre indéfini de fois y compris 0

$ echo "Exension Extension Exttension Extttension"|grep 'Ext*e' --colour
Exension Extension Exttension Extttension
$ echo "Exension Extension Exttension Extttension"|grep -E 'Ext?' --colour
Exension Extension Exttension Extttension

2.3.2 Répétition du caractère précédent 0 ou 1 fois

$ echo "Exension Extension Exttension Extttension"|grep -E 'Ext?e' --colour
Exension Extension Exttension Extttension

2.3.3 Répétition du caractère précédent un nombre indéfini de fois au minimum 1

$ echo "Exension Extension Exttension Extttension"|grep -E 'Ext+e' --colour
Exension Extension Exttension Extttension

2.3.4 Répétition du caractère précédent N fois

$ echo "Exension Extension Exttension Extttension"|grep -E 'xt{2}e' --colour
Exension Extension Exttension Extttension

2.3.5 Répétition du caractère précédent au minimum N fois

$ echo "Exension Extension Exttension Extttension"|grep -E 'xt{2,}e' --colour
Exension Extension Exttension Extttension

2.3.6 Répétition du caractère précédent entre N et P fois

$ echo "Exension Extension Exttension Extttension"|grep -E 'xt{1,2}e' --colour
Exension Extension Exttension Extttension

2.4 - Divers

2.4.1 Ou logique

$ echo "Regex Ext" |grep -E 'Reg|Ext' --colour
Regex Ext

2.4.2 Regroupement

$ echo "ABCD-1234-12AB-1A2B-A1B2" |grep -E '([[:digit:]][[:alpha:]]){2}-' --colour
ABCD-1234-12AB-1A2B-A1B2

2.4.3 Exemple de combinaison des différentes règles

$ echo "01 2345 6789" |grep -oE "^(0|\+33 )[1-9]( *[0-9]{2}){4}$"
01 2345 6789

$ echo "+33 1 23 45 67 89" |grep -oE "^(0|\+33 )[1-9]( *[0-9]{2}){4}$"
+33 1 23 45 67 89