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 | ||
doc:programmation:shell:les-metacaracteres [21/04/2010 11:10] smolski |
doc:programmation:shell:les-metacaracteres [03/03/2017 15:26] (Version actuelle) debianux [Présentation] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Les métacaractères, ou globs, ou encore patterns ====== | ||
+ | * Objet : Les métacaractères, ou globs, ou encore patterns | ||
+ | * Niveau requis :{{tag>débutant avisé}} | ||
+ | * Commentaires : FIXME | ||
+ | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-) | ||
+ | * Suivi : {{tag>à-tester}} | ||
+ | * Création par [[user>MaTTuX_]] le 17/01/2009 | ||
+ | * Testé par .... le .... | ||
+ | * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?pid=113877#p113877 |C'est ici]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
+ | |||
+ | **Nota :** Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
+ | |||
+ | ===== Présentation ===== | ||
+ | |||
+ | Les shells de type bourne (comme **Bash**, **Zsh**, **Ksh**, **Dash**...) supportent une syntaxe | ||
+ | très puissante : les **globs** encore appelés **patterns** | ||
+ | |||
+ | //(glob: "global command")//((https://en.wikipedia.org/wiki/Glob_%28programming%29)) | ||
+ | |||
+ | 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 user> | ||
+ | echo *</code> | ||
+ | affiche le nom de tous les fichiers du répertoire. | ||
+ | |||
+ | ==== Exemples ==== | ||
+ | |||
+ | |||
+ | <code user> | ||
+ | for f in *; do echo "$f"; done</code> | ||
+ | Même chose, mais en faisant une boucle. Il sera affiché un fichier par ligne | ||
+ | |||
+ | |||
+ | <code user> | ||
+ | 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 user> | ||
+ | ls</code> | ||
+ | Affiche : | ||
+ | <file config retour de la commande>toto titi tata test tintin milou | ||
+ | |||
+ | </file> | ||
+ | |||
+ | Nous voulons n'afficher que les fichiers dont les noms font quatre lettres de longueur : | ||
+ | <code user>ls ????</code> | ||
+ | Affiche : | ||
+ | <file config retour de la commande>tata test titi toto | ||
+ | </file> | ||
+ | |||
+ | ---- | ||
+ | \\ | ||
+ | Nous aimerions maintenant afficher les fichiers toto titi et tata, mais ne pas toucher aux autres. | ||
+ | |||
+ | Nous pouvons aisément faire, par exemple : | ||
+ | <code user> | ||
+ | ls t?t?</code> | ||
+ | Affiche : | ||
+ | <file config retour de la commande> | ||
+ | tata titi toto | ||
+ | |||
+ | </file> | ||
+ | |||
+ | 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 user>ls</code> | ||
+ | Affiche : | ||
+ | <file config retour de la commande> | ||
+ | tata titi toto test tintin milou</file> | ||
+ | |||
+ | La commande avec les crochets : | ||
+ | <code user> | ||
+ | ls t[oi]t[oi]</code> | ||
+ | Affiche : | ||
+ | <file config retour de la commande> | ||
+ | titi toto | ||
+ | |||
+ | </file> | ||
+ | |||
+ | Génial ! Mais, voyons ce qu'il se passe lorsqu'un fichier au nom inattendu montre le bout de son nez : | ||
+ | <code user> | ||
+ | touch tito</code> | ||
+ | |||
+ | Vous savez qui c'est Tito, n'est ce pas ? :-) | ||
+ | |||
+ | <code user> | ||
+ | ls</code> | ||
+ | Affiche : | ||
+ | <file config retour de la commande> | ||
+ | tata test titi tito toto tintin milou</file> | ||
+ | |||
+ | <code user> | ||
+ | ls t[oi]t[oi]</code> | ||
+ | Affiche : | ||
+ | <file config retour de la commande> | ||
+ | titi tito toto | ||
+ | </file> | ||
+ | |||
+ | 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 user> | ||
+ | ls t[a-z]t[a-z]</code> | ||
+ | <file config retour de la commande> | ||
+ | tata titi tito toto | ||
+ | </file> | ||
+ | |||
+ | |||
+ | ===== Remarque ===== | ||
+ | |||
+ | Voilà, vous avez tout en main pour comprendre les **globs** basiques. | ||
+ | |||
+ | Pour plus d'informations, n'oubliez pas le manuel : | ||
+ | <code user>man nom-du-programme</code> | ||
+ | |||
+ | exemple : | ||
+ | <code user>man mkdir</code> | ||
+ | Affiche : | ||
+ | <file config retour de la commande>NAME | ||
+ | mkdir - make directories | ||
+ | |||
+ | SYNOPSIS | ||
+ | mkdir [OPTION]... DIRECTORY... | ||
+ | |||
+ | DESCRIPTION | ||
+ | Create the DIRECTORY(ies), if they do not already exist.</file> | ||
+ | |||
+ | ===Avoir le man en français=== | ||
+ | Non recommandé : | ||
+ | <code root>apt-get install manpages-fr</code> | ||
+ | |||
+ | Plus tard nous verrons quelques concepts de **globs** plus avancés. | ||
+ | |||
+ | ===== Liens ===== | ||
+ | |||
+ | * [[:doc:programmation:shell:regexp | regexp ou Regular Expression ou Expression Régulière]] |