Synthèse des types d’expression
Les expressions de sélection
1. Quels programmes les utilisent ?
Les expressions de sélection (ou de filtrage) permettent la sélection de noms de fichiers. Elles sont principalement utilisées par les shells et certaines fonctions :
-
sh
-
csh
-
ksh
-
tcsh
-
bash
-
zsh
-
find (options -name, -iname, -lname, -ilname, -path, -ipath)
-
glob()
-
fnmatch()
-
etc.
2. Les métacaractères
Les métacaractères utilisés sont les suivants :
-
?
-
[ ]
-
*
3. Les quantificateurs
Il n’y a pas de quantificateur permettant d’indiquer la répétition d’un caractère dans les expressions de sélection.
Le caractère * désigne une chaîne quelconque de longueur éventuellement nulle.
Les expressions régulières basiques
1. Quels programmes les utilisent ?
Les expressions régulières basiques sont les expressions que l’on trouve dans les commandes et fonctions suivantes :
-
ed
-
ex
-
expr
-
grep (sans option -E)
-
find (options -regextype posix-basic -regex)
-
awk
-
vi (par défaut, ou avec option nofullre quand elle existe)
-
vim
-
regcomp() / regexec() (sans le flag REG_EXTENDED)
-
hl (sans l’option -e)
-
etc.
2. Les métacaractères
Les métacaractères utilisés sont les suivants :
-
.
-
*
-
[ ]
-
\< \>
-
ˆ
-
$
-
\
-
( ) (pour la sélection par ed ou ex par exemple)
3. Les quantificateurs
Seul le caractère * peut être utilisé comme caractère indiquant la répétition. Il représente un facteur multiplicateur supérieur ou égal à 0.
4. Les classes de caractères
Les classes de caractères sont désignées par la syntaxe [[:classe:]]. Les classes de caractères sont détaillées dans le chapitre intitulé Les classes de caractères POSIX. Elles ne sont pas toujours supportées.
Les expressions régulières étendues
1. Quels programmes les utilisent ?
Les expressions régulières étendues sont les expressions que l’on trouve dans les commandes et fonctions suivantes :
-
grep -E, egrep
-
sed -r
-
find (options -regextype emacs, -regextype posix-awk, -regextype posix-grep, -regextype posix-extended, avec option -regex)
-
lex
-
vi (avec option fullre quand elle existe)
-
vim
-
regcomp() / regexec() (avec le flag REG_EXTENDED)
-
le langage Python
-
le langage Perl
-
etc.
2. Les métacaractères
Les métacaractères utilisés sont les suivants :
-
.
-
[ ]
-
*
-
+
-
?
-
{ }
-
\< \>
-
ˆ
-
$
-
\
-
( )
-
|
3. Les quantificateurs
Les quantificateurs servent à d’indiquer le nombre d’occurrences d’une expression :
-
* : 0 à N fois (N étant strictement positif),
-
+ : 1 à N fois (N étant strictement positif),
-
? : 0 ou 1 fois,
-
{min,max} : min à max fois.
4. Les classes de caractères
Les classes de caractères sont désignées par la syntaxe [[:classe:]]. Les classes de caractères sont détaillées dans le chapitre intitulé Les classes de caractères POSIX. Elles ne sont pas toujours supportées.
Les expressions régulières de find
1. Généralités
L’option --regex de la commande find permet de comparer les noms longs des fichiers, trouvés lors du parcours des arborescences, à des expressions régulières. Le type de ces dernières peut être spécifié grâce à l’option --regextype. Les différents types implémentés présentent quelques différences qu’il est souhaitable de connaître pour éviter de commettre des erreurs.
Les différentes interprétations des métacaractères et expressions régulières sont définies dans la documentation des utilitaires de find sur le site http://www.gnu.org/.
Elles sont résumées dans les sections suivantes sous forme de tableaux pour une meilleure lisibilité.
Dans tous les cas, l’expression la plus longue est considérée.
2. les différentes interprétations des expressions régulières
a. emacs
. |
tout sauf un saut de ligne (\n). |
* |
zéro, une ou plusieurs fois ce qui précède, sauf en début d’expression ou après \( ou \|. |
+ |
une ou plusieurs fois ce qui précède, sauf en début d’expression ou après \( ou \|. |
? |
zéro ou une fois ce qui précède, sauf en début d’expression ou après \( ou \|. |
\+ |
+ |
\? |
? |
[ ... ] |
définition de plages de caractères ; les plages inversées sont ignorées ; \ sans signification ; classes POSIX non reconnues. |
\w |
caractère dans un mot. |
\W |
caractère qui n’est pas dans un mot. |
\< |
début de mot. |
\> |
fin de mot. |
\b |
délimiteur de mot. |
\B |
tout sauf un délimiteur de mot. |
\` |
début des données. |
\’ |
fin des données. |
\( ... \) |
groupement d’expressions ; gestion des références arrières avec \i où i est entier. |
\| |
OU logique. |
ˆ |
début de chaîne en début d’expression, ou après \(, ou après \|. |
$ |
fin de chaîne en fin d’expression. |
b. posix-awk
. |
tout sauf un caractère nul. |
* |
zéro, une ou plusieurs fois ce qui précède ; interdit en début d’expression, après ( et après |. |
+ |
une ou plusieurs... |