2 Noms de fichiers, méta-caractères, et expressions régulières
Deux spécification des méta-caractères sont utilisées :
-
Les méta-caractères du shell pour identifier des noms de
fichiers. Ils sont utilisés directement par le shell et aussi par
certaines commandes telle find.
- Les méta-caractères plus généraux utilisés par la plupart des
commandes identifiant des expressions régulières.
2.1 Méta-caractères du shell
Métacaractères du shell.
Le shell étend les méta-caractères ? * [] [-]
pour identifier
des noms de fichiers qui correspondent à un motif donné. Placez-vous
dans le répertoire /usr/bin. À l’aide des méta-caractères,
listez par la commande ls (l’option -d de
ls permet de lister les noms des répertoires plutôt que leur
contenu) :
-
toutes les entrées dont le nom commence par t ;
- toutes les entrées dont le nom comporte exactement trois
caractères ;
- toutes les entrées dont le nom comporte au moins trois
caractères ;
- toutes les entrées dont le nom comporte au plus trois
caractères ;
- toutes les entrées dont le nom comporte au moins un d
;
- toutes les entrées dont le nom commence par a ou
t ;
- toutes les entrées dont le nom commence par r,
s, t ou u.
Recherche de fichiers.
La commande find permet de retrouver des fichiers. En
particulier, il est possible de rechercher des fichiers dont le nom
correspond à un motif comportant des méta-caractères du shell. Essayez
% find /usr/bin -name '*.sh'
2.2 Méta-caractères des expressions régulières
Méta-caractères des expressions régulières.
L’ensemble des méta-caractères est le suivant :
\ | ( ) [ { ^ $ * + ?
-
Le caractère \ transforme un méta-caractère en
littéral ;
- le caractère . correspond à n’importe quel caractère
;
- le caractère ^ marque le début d’une chaîne ;
- le caractère $ marque la fin d’une chaîne.
Ainsi
-
^bonjour$
- reconnaît bonjour seul ;
- $
- reconnaît une chaîne vide.
-
Le caractère | marque l’alternative.
Par exemple,
-
L[y|i]s
- reconnaît Lys ou Lis ;
- ^(De|Sujet|Date):@
- reconnaît tout ce qui commence
par De:@ ou Sujet:@ ou Date:@ ;
-
Le caractère * reconnaît zéro, une ou plusieurs
occurences du caractère précédent ;
- le caractère + reconnaît une ou plusieurs occurrences
du caractère précédent ;
- l’expression régulière {x} avec
x un nombre reconnaît exactement x
occurrences du caractère précédent ;
- l’expression régulière {x,} reconnaît
x occurrences et plus du caractère précédent ;
- l’expression régulière {x,y}
reconnaît au minimum x et au maximum
y occurrences du caractère précédent.
Ainsi,
-
a?
- reconnaît 0 ou 1 a ;
- a*
- reconnaît 0, 1 ou plusieurs a ;
- a+
- reconnaît 1 ou plusieurs a ;
- a{2}
- reconnaît aa ;
- a{2,3}
- reconnaît aa ou aaa.
-
[ ] indique une classe où un intervalle dans une
classe.
Par exemple :
-
[a-z]
- reconnaît les lettres de a à z ;
- [Bb]onjour
- reconnaît Bonjour ou bonjour ;
- <h[1-6]>
- une balise HTML de titre par exemple.
Attention au tiret dans [ ], il represente un intervalle, si
on veut l’utiliser comme littéral normal, il faut le mettre après le
[ ou avant le ] , [a-z-].
-
L’expression régulière [^... ] au lieu de
[...] indique une classe complémentée.
Par exemple,
-
[^0-9]
- reconnaît tout ce qui n’est pas des
chiffres ;
- [^1-6]
- reconnaît tout sauf les chiffres de 1 à 6.
Attention, parce que ^ est entre [ ], sa
sémantique est différente et ne signifie pas début de ligne !
-
L’expression régulière ( ) encadre des instructions
pour capturer des sous-chaînes.
Par exemple,
-
( ?ho)+
- reconnaît ho, ho ho, ho ho ho, hohoho...
Utilisation des expressions régulières.
Certaines commandes, telles grep et sed, utilisent
des expressions régulières pour identifier des motifs. La commande
grep recherche les lignes de fichiers qui comprennent un
motif correspondant à une expression régulière donnée. La syntaxe de
grep est de la forme
grep [options] regexpr [fichiers]
Attention, pour éviter une confusion entre les interprétations de ces
symboles spéciaux par grep ou par le shell, il est
indispensable de « verrouiller » regexpr en plaçant l’expression entre
guillemets ’.
Voici quelques exemples d’utilisation :
-
On cherche dans le fichier /etc/passwd, les lignes
dont la 1re lettre est quelconque et la 2e doit être o
% grep '^.o' /etc/passwd
- On cherche dans le fichier /etc/passwd les lignes
commençant par t
% grep "^t" /etc/passwd
- On cherche les lignes ne commençant pas commençant par t
% grep -v "^t" /etc/passwd
Essayez les commandes
% grep '-' LISEZ-MOI
% grep '^-' LISEZ-MOI
% grep '^-* ' LISEZ-MOI
Notez bien l’espace entre l’étoile et la quote dans cette dernière
commande.
Échappement, quotes, double-quotes...
Les caractères \ ' "
annulent, tout ou en partie, les effets
des méta-caractères du shell. Essayez les commandes
% echo $USER
% echo "Bonjour $USER"
% echo 'Bonjour $USER'
% echo "* Bonjour $USER *"
% echo '* Bonjour $USER *'
% echo \* Bonjour $USER \*
% echo \* Bonjour \$USER \*
% echo '* Bonjour "$USER"'