Il est probable que vous utilisiez déjà sans le savoir des
caractères d'englobement. Quand vous
enregistrez un fichier dans une application sous Windows® ou
lorsque vous recherchez un fichier, vous utilisez
*
pour désigner une suite de caractères
quelconques. Par exemple, *.txt
désigne
l'ensemble des fichiers dont le nom se termine par
.txt
. Nous l'avons également utilisé
fréquemment dans la section précédente, mais l'englobement va
beaucoup plus loin que le seul *
.
Quand vous tapez une
commande comme ls *.txt, puis
Entrée, la tâche de trouver quels fichiers
correspondent au motif *.txt
n'est pas du
ressort de ls, mais doit passer par le shell
lui-même. Cela requiert donc une petite explication sur la façon
dont le shell interprète une ligne de commande. Lorsque vous
tapez :
$ ls *.txt readme.txt recettes.txt
La ligne de commande est tout d'abord
séparée en mots (ls
et *.txt
en l'occurrence). Quand le shell voit le
*
dans un des mots, il interprète le mot comme
étant un motif englobant et le remplace dans la ligne de commande
par les noms de tous les fichiers correspondant au motif. Avant que
ne s'exécute la ligne de commande dans le shell, ce dernier
aura remplacé l'astérisque (*
) par
readme.txt
et
recettes.txt
; la commande deviendra donc
ls readme.txt recettes.txt, ce qui donnera le
résultat recherché. Le shell réagit aussi à la vue d'autres
caractères :
[...]
:
correspond
à tout caractère écrit entre les crochets ; les caractères
peuvent désigner soit des intervalles (par exemple,
1-9
), soit des valeurs
discrètes, soit encore
un mélange des deux. Exemple : [a-zBE5-7]
correspond à tous les caractères de a
à
z
, un B
, un
E
, un 5
, un
6
ou un 7
;
[^...]
: correspond
à tous les caractères qui ne se trouvent pas
entre les crochets ; [^a-z]
, par exemple,
correspond à tout caractère qui n'est pas une lettre
minuscule[6].
{c1,c2}
:
correspond à c1
ou c2
,
où c1
et c2
sont
également des caractères d'englobement, ce qui signifie que
vous pouvez écrire {[0-9]*,[acr]}
par exemple.
Voici quelques exemples de motifs et leur signification :
/etc/*conf
: tous
les fichiers du répertoire /etc
dont le nom
se termine par conf
. Cela peut correspondre
au fichier /etc/inetd.conf
, mais aussi à
/etc/conf.linuxconf
, et à
/etc/conf
si un tel fichier
existe. Souvenez-vous que *
peut correspondre à
une chaîne vide.
image/{cars,space[0-9]}/*.jpg
:
tous les fichiers dont le nom se termine par
.jpg
dans les répertoires
image/cars
,
image/space0
, jusqu'à
image/space9
, s'ils existent.
/usr/share/doc/*/README
:
tous les fichiers de nom README
dans tous
les sous-répertoires immédiats de
/usr/share/doc
. Cela correspondra à
/usr/share/doc/mandrake/README
par exemple,
mais pas à /usr/share/doc/myprog/doc/README
.
*[^a-z]
:
tous les fichiers du répertoire courant dont le nom ne finit
pas par une lettre minuscule.
[6]
Attention ! Bien que cela soit
vrai pour la plupart des langues, il est possible que cela ne
fonctionne pas pour votre langue locale. Cela dépend de l'ordre
de tri (collating order). Pour
certaines configurations de langue, [a-z]
correspondra à a
, A
,
b
, B
(...),
Z
. Et cela, sans parler du fait que certaines
langues contiennent des caractères accentués...