Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:programmation:shell:les-metacaracteres [19/01/2009 18:05] 90.28.96.124 |
doc:programmation:shell:les-metacaracteres [18/05/2011 10:27] smolski |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Les métacaractères, ou globs, ou encore patterns ====== | ||
+ | Les shells de type bourne (comme **Bash**, **Zsh**, **Ksh**, **Dash**...) supportent une syntaxe | ||
+ | très puissante : les **globs** encore appelés **patterns** | ||
+ | |||
+ | Les globs les plus basiques sont : | ||
+ | |||
+ | ===== L'astérisque (*) : ===== | ||
+ | |||
+ | L'astérisque signifie "n'importe quelle chaîne de n'importe quels caractères" | ||
+ | |||
+ | <code bash> | ||
+ | $ echo *</code> | ||
+ | affiche le nom de tous les fichiers du répertoire. | ||
+ | |||
+ | ==== Exemples ==== | ||
+ | |||
+ | |||
+ | ---- | ||
+ | \\ | ||
+ | <code bash> | ||
+ | $ for f in *; do echo "$f"; done</code> | ||
+ | Même chose, mais en faisant une boucle. Il sera affiché un fichier par ligne | ||
+ | |||
+ | ---- | ||
+ | \\ | ||
+ | <code bash> | ||
+ | $ mv /repertoire/*.pdf /autre/part</code> | ||
+ | déplacer tout les fichiers pdf de "/repertoire" et les placer dans "/autre/part" | ||
+ | |||
+ | |||
+ | On notera que les fichiers dont le nom commencent par un point ne sont pas affectés par ***** . \\ | ||
+ | //A votre avis, comment peut on faire pour les afficher aussi ?// :-) | ||
+ | |||
+ | ===== Le point d'interrogation (?) : ===== | ||
+ | |||
+ | Un point d'interrogation signifie "un caractère quelconque et un seul". | ||
+ | |||
+ | ==== Exemples ==== | ||
+ | |||
+ | Imaginons que nous nous retrouvions avec les fichiers : | ||
+ | <code bash> | ||
+ | $ ls | ||
+ | toto titi tata test tintin milou | ||
+ | $ | ||
+ | </code> | ||
+ | |||
+ | Nous voulons n'afficher que les fichiers dont les noms font quatre lettres de longueur : | ||
+ | <code bash> | ||
+ | $ ls ???? | ||
+ | tata test titi toto | ||
+ | $ | ||
+ | </code> | ||
+ | |||
+ | ---- | ||
+ | \\ | ||
+ | Nous aimerions maintenant afficher les fichiers toto titi et tata, mais ne pas toucher aux autres. | ||
+ | |||
+ | Nous pouvons aisément faire, par exemple : | ||
+ | <code bash> | ||
+ | $ ls t?t? | ||
+ | tata titi toto | ||
+ | $ | ||
+ | </code> | ||
+ | |||
+ | Simple, non ? :-) | ||
+ | |||
+ | ===== Les crochets ([ ]) : ===== | ||
+ | |||
+ | Nous savons nous servir de *****, de **?**, très bien, mais il ne sont parfois pas assez complets pour exprimer des besoins précis. | ||
+ | D'où l'introduction des **expressions** **entre** **crochet** (POSIX parle de bracket expression). | ||
+ | Une expression entre crochets peut avoir plusieurs formes, la plus simple est la liste. | ||
+ | |||
+ | La liste ''[abcde]'' peut correspondre à n'importe quel lettre entre crochets : **a** ou **b** ou **c** ou **d** ou **e**. \\ | ||
+ | Donc, ''[hv]elo'' peut correspondre à la chaîne de caractères ''helo'' tout comme à ''velo''. | ||
+ | |||
+ | ==== Exemples ==== | ||
+ | |||
+ | Poursuivons avec nos fichiers. | ||
+ | |||
+ | Nous aimerions quelque chose d'encore plus précis qu'avec ''t?t?''. \\ | ||
+ | Pour n'afficher que ''toto'' et ''titi'' nous allons utiliser les crochets. | ||
+ | |||
+ | La liste des fichiers : | ||
+ | <code bash>$ ls | ||
+ | tata titi toto test tintin milou</code> | ||
+ | |||
+ | La commande avec les crochets : | ||
+ | <code bash> | ||
+ | $ ls t[oi]t[oi] | ||
+ | titi toto | ||
+ | $ | ||
+ | </code> | ||
+ | |||
+ | Génial ! Mais, voyons ce qu'il se passe lorsqu'un fichier au nom inattendu montre le bout de son nez : | ||
+ | <code bash> | ||
+ | $ touch tito</code> | ||
+ | |||
+ | Vous savez qui c'est Tito, n'est ce pas ? :-) | ||
+ | |||
+ | <code bash> | ||
+ | $ ls | ||
+ | tata test titi tito toto tintin milou</code> | ||
+ | |||
+ | <code bash> | ||
+ | $ ls t[oi]t[oi] | ||
+ | titi tito toto | ||
+ | $ | ||
+ | </code> | ||
+ | |||
+ | C'est déjà intéressant, mais il y a mieux : \\ | ||
+ | la possibilité d'utiliser des ''groupes'' de lettres dans les expressions entre crochets : | ||
+ | <code bash> | ||
+ | $ ls [a-z][a-z]</code> | ||
+ | |||
+ | |||
+ | ===== Remarque ===== | ||
+ | |||
+ | Voilà, vous avez tout en main pour comprendre les **globs** basiques. | ||
+ | |||
+ | Pour plus d'informations, n'oubliez pas : | ||
+ | man <votreshell> | ||
+ | |||
+ | Plus tard nous verrons quelques concepts de **globs** plus avancés. | ||
+ | |||
+ | ===== Liens ===== | ||
+ | |||
+ | * [[commande:regexp | regexp ou Regular Expression ou Expression Régulière]] |