Une expression régulière est un modèle de chaîne de caractères auquel peut être associé un certain nombre de chaînes de caractères avec des caractéristiques communes : celles de l'expression régulière.
Une expression régulière est construite à l'aide de différents caractères dont certains ont une signification particulière. Ce sont les caractères spéciaux (nommés aussi atome).
Les expressions régulières sont utilisées par les outils d'édition et de recherche dans les fichiers tel que vi, grep, sed, awk, ed, ex, etc.
Il existe plusieurs versions d'expressions régulières.
Je ne parlerai ici que de la version basique.
Les atomes dans les expressions régulières sont des caractères générant une interprétation par l'application utilisant les expressions régulières.
Un atome quantificateur est un atome générant un comportement sur le caractère qui précède cet atome.
| Atomes ou expression régulière | Descriptions |
|---|---|
* |
Répétition du caractère qui précède de 0 à n fois. Par exempe a* correspond à <rien> ou a ou aa ou aaa ... |
+ |
Répétition du caractère qui le précède de 1 à n fois. Par exempe a+ correspond à a ou aa ou aaa ... |
? |
Correspond à 0 ou 1 fois le caractère précédent. Par exempe a? correspond à <rien> ou a |
car\{m,M\} |
Un caractère répété au minimum m fois et au maximum M fois. Par exempe ab\{1,3\}c correspond à abc, abbc ou abbbc |
car\{n,\} |
Un caractère répété au minimum n fois. Par exempe es\{2,\}ai correspond à esssai, essssai, etc.. |
car\{n\} |
Un caractère répété très exactement n fois. Par exemple [A-Z]\{3\} correspond à une chaîne de caractères composée de 3 majuscules |
| Atomes ou expression régulière | Descriptions |
|---|---|
. |
Un caractère quelconque. Par exemple, .* correspond soit à une séquence de caractères quelconques, soit à <rien>, soit à une suite d'un nombre quelconque de n'importe quel caractère. |
[liste car] |
Un seul caractère parmi ceyx de la liste entre []. Par exemple [abc12] correspond à [a] ou [b] ou [c] ou [1] ou [2] |
[intervalle-caractères] ([car. début - car. fin]) |
Un seul caractère dans l'intervalle. Par exemple [A-Z] correspond à une seul lettre en majuscule, [A-Za-z] correspond toutes les lettres en minuscule et majuscules |
[^caractères] |
Un seul caractère autre que ceux entre []. L'atome ^ dans les [] signifi la négation |
[^chaîne] |
Chaîne de caractères placée en début de ligne. Par exemple ^B correspond à une ligne qui commence par B. |
[chaîne$] |
Chaîne de caractères placée en fin de ligne. Par exemple fin$ correspond à une ligne qui se termine par fin. |
Les classes de caractères sont des regroupements thématiques de caractères
| Classes | Descriptions |
|---|---|
[:alpha:] |
N'importe quelle lettre |
[:digit:] |
N'importe quel chiffre |
[:xdigit:] |
Caractères hexadécimaux |
[:alnum:] |
N'importe quelle lettre ou chiffre |
[:space:] |
N'importe quel espace blanc |
[:punct:] |
N'importe quel signe de ponctuation |
[:lower:] |
N'importe quelle lettre en minuscule |
[:upper:] |
N'importe quelle lettre capitale |
[:blank:] |
Espace ou tabulation |
[:graph:] |
Caractères affichables et imprimables |
[:cntrl:] |
Caractères d'échappement |
[:print:] |
Caractères imprimables exceptés ceux de contrôle |
Les caractères d'échappement permettent de simplifier certains critères d'expressions.
| Classes | Descriptions |
|---|---|
\n |
Nouvelle ligne |
\r |
Retour charriot |
\t |
Tabulation |
\d |
Des Chiffres |
\s |
Des séparateurs |
\w |
Tous les caractères alphanumériques et l'underscore |
\D |
Tout sauf des chiffres |
\S |
Tout sauf des séparateurs |
\W |
Tous les caractères sauf les alphanumériques et l'underscore |
\u |
Le caractère suivant sera transformé en majuscule |
\U |
Tous les caractères suivants seront transformés en majuscules jusqu'à \E |
\l |
Le caractère suivant sera transformé en minuscule |
\L |
Tous les caractères suivants seront transformés en minuscules jusqu'à \E |
\E |
Termine les \L et \U |
\| |
"ou" en expression régulière |
\ |
L'antislash est le banaliseur d'atome. Par exemple \* correspond au caractère * et non pas au quantifieur * |
Partie d'une expression régulière encadrée par des parenthèses.
Les parenthèses doivent obligatoirement être protégées par des antislash.
Pour réutiliser des sous expressions de 1 à 9.
Elles doivent obligatoirement être protégées par des antislash.
Les sous expressions sont numérotées de 1 à 9 par la parenthèse ouvrante.
La référence arrière reprend exactement le résultat trouvé dans sa sous expression de référence.
Syntaxe :
grep [OPTIONS] `expression` <nom_fichier>
| Options | Descriptions |
|---|---|
-c |
Nombre de lignes contenant l'expression |
-h |
Suppression du nom de fichier lorsque la recherche est faite dans plusieurs fichiers |
-i |
Ignore la casse (distinction minuscile et majuscule) |
-l |
Affiche uniquement le nom des fichiers contenant l'expression |
-n |
Chaque ligne est précédée de son numéro dans le fichier |
-v |
Affiche uniquement les lignes qui ne contiennent pas l'expression |
-f <fichiexpr> |
Fichier dans lequel se trouve l'expression à chercher |
-e |
Option facultative qui précède l'expression à rechercher, il est possible de faire plusieurs -e pour rechercher plusieurs expressions dans un fichier |
`expression` |
Expression régulière. Il est préférable de la protéger par de simple quote. |
<nom_fichier> |
Nom du fichier dans lequel la recherche doit être faite. Ce nom peut être générique. Si aucun nom n'est spécifié, la recherche est faite sur le canal d'entrée. |
Syntaxe :
find <chemin> [critères] [action]
| Options | Descriptions |
|---|---|
<chemin> |
Nom du ou des répertoires à partir desquels la recherche sera faite. Si ce n'est pas spécifié, find commence sa recherche à partir de l'endroit où la commande est lancée |
critères |
Critères de recherche qio permettent une sélection très précise des fichiers. Voici en exemple les plus courants |
-name <nom> : permet une recherche en fonction du nom. Si le nom est générique, il devra être protégé par des doubles quotes |
|
-user <nom> : Recherche des fichiers dont le user propriétaire est nom |
|
-group <nom> : Recherche des fichiers dont le groupe propriétaire est nom |
|
-type <t> : Recherche en fonction de la nature des fichiers. <t> peut prendre les valeurs suivantes : f fichier ordinaire, d répertoirte, l lien symbolique, b fichier spécial en mode bloc, c fichier spécial en mode caractère, p canal nommé |
|
-perm [-] <perms> : Recherche en fonction des droits. <perms> peut être exprimé en notification octale ou symbolique |
|
-size nb [c] : Recherche en fonction de la taille des fichiers exprimée en blocs ou en octets si nb est suivi du caractère c |
|
-newer <nom> : Recherche les fichiers dont la date de modification est plus récente que la date de modification du fichier nom |
|
-atime <nb> : recherche des fichiers sur la date de dernier accès, nb correspond au nombre de jours (1 pour la veille, 2 pour 2 jours avant, etc) |
|
-ctime <nb> : Recherche de fichiers sur la date de création ou de dernière modification |
|
-mtime <mb> : Recherche de fichiers sur la date de dernière modification |
|
-inum <num> : Recherche defichier sur le numéro d'inode |
|
[actions] |
Les actions sont exécutées pour chaque occurence trouvée par find |
-print : Affiche les noms des fichiers trouvés au fur et à mesure |
|
-exec <cmd> [options] {} \; : Pour chaque fichier trouvé, exécute la commande cmd. Le nom de chaque fichier est symbolisé par {}. La commande se termine obligatoirement par un espace suivi des caractères \; |
|
-ok <cmd> [options] {} \; : Identique à exec mais demande une confirmation pour l'exécution de la commande pour chacun des fichiers |
Il est possible avec la commande find de regrouper des critères de recherche et d'ajouter des opérateurs de sélection.
Les regroupements seront à encadrer par des parenthèses précédées d'un antislash.
| Opérateurs | Descriptions |
|---|---|
! |
Opérateur de négation |
-o |
Opérateur "OU" (or) |
-a |
Opérateur "ET" (and) |