logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

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 → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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:regexp [26/08/2013 18:25]
smolski [Introduction]
doc:programmation:shell:regexp [22/09/2013 10:24]
smolski [Les caractères regexp]
Ligne 8: Ligne 8:
     * Création par **smolski** 26/08/2013     * Création par **smolski** 26/08/2013
     * Testé par <...> le <...>     * Testé par <...> le <...>
-  * Commentaires sur le forum : [[http://​debian-facile.org/​viewtopic.php?​id=1038 | Lien vers le forum concernant ce tuto]]+  * Commentaires sur le forum : [[http://​debian-facile.org/​viewtopic.php?​id=1038 | Lien vers le forum concernant ce tuto]]((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
  
->​N'​hésitez pas à y faire part de vos remarquessuccèsaméliorations ​ou échecs ​!+=== Nota === 
 + 
 +Contributeursles FIXME sont là pour vous aidersupprimez-les une fois le problème corrigé ​ou le champ rempli ​!
  
 ===== Utilisation ===== ===== Utilisation =====
Ligne 23: Ligne 25:
 //Même si c'est souvent un exercice de l'​esprit,​ ça vaut le coup de faire l'​effort d'​apprendre à les utiliser.// //Même si c'est souvent un exercice de l'​esprit,​ ça vaut le coup de faire l'​effort d'​apprendre à les utiliser.//
  
-Attention, il existe plusieurs syntaxes de regexp qui diffèrent un peu selon les programmes, pas pour ennuyer l'​utilisateur,​ mais il s'agit de choix faits pour des raisons de fonctionnalités et d'​optimisation. \\ +<note warning>​**Attention**, il existe plusieurs syntaxes de regexp qui diffèrent un peu selon les programmes, pas pour ennuyer l'​utilisateur,​ mais il s'agit de choix faits pour des raisons de fonctionnalités et d'​optimisation. \\ 
-Il faut donc savoir si vous utilisez la norme **POSIX**, **perl**, **python**...+Il faut donc savoir si vous utilisez la norme **POSIX**, **perl**, **python**...</​note>​
  
 À noter que, concernant le shell (la ligne de commande) vous allez aussi trouver le mot **Glob**. \\ À noter que, concernant le shell (la ligne de commande) vous allez aussi trouver le mot **Glob**. \\
Ligne 36: Ligne 38:
  
 Les //regexp// des [[manuel:​shell]] sont des règles de filtrage permettant de sélectionner des fichiers selon leur nom ou leur emplacement. \\ Les //regexp// des [[manuel:​shell]] sont des règles de filtrage permettant de sélectionner des fichiers selon leur nom ou leur emplacement. \\
-Ces règles ne sont pas transmises au programme tel quel mais sont remplacées par le shell utilisé.+Ces règles ne sont pas transmises au programme tel quel mais sont remplacées par le shell utilisé, aussi, pour la commodité de ce tuto et sauf indication contraire, nous utiliserons ici le shell [[:​doc:​programmation:​bash]].
  
-Pour la commodité de ce tuto, sauf indication contraire, nous utiliserons ici le shell [[manuel:​bash]]. +Par exemple pour cette commande [[:​doc:​systeme:ls]] dont l'​option **-d** permet à **ls** de lister uniquement les répertoires,​ sans leur contenu : 
- +<​code ​user>
-Par exemple pour cette commande [[commande:ls]] dont l'​option **-d** permet à **ls** de lister uniquement les répertoires,​ sans leur contenu : +
-<​code ​bash>+
 ls -d *</​code>​ ls -d *</​code>​
  
-C'est bash qui va **interpréter** la regexp * (étoile) et la remplacer par tout le contenu du répertoire rendu ainsi lisible pour la commande ls et son action sur chacun d'eux. +C'est bash qui va **interpréter** la regexp * (étoile) et la remplacer par **tout le contenu du répertoire** rendu ainsi lisible pour la commande ​**ls** et son action sur chacun d'​eux ​comme ici par exemple : 
-   ​fichier1 fichier2 … dossier1 …+  fichier1 fichier2 … dossier1 …
  
 <note important>​**ATTENTION !** <note important>​**ATTENTION !**
-De par leur statut de caractères spéciaux, les ''​regexp'' ​ne peuvent pas être utilisées n'​importe comment, leur rédaction demande une vrai connaissance de ce que l'on désire faire au final.</​note>​+De par leur statut de caractères spéciaux, les **regexp** ne peuvent pas être utilisées n'​importe comment, leur rédaction demande une vrai connaissance de ce que l'on désire faire au final.</​note>​
  
 Tout d'​abord,​ un exemple pour appréhender les notions utilisées dans cette page. \\ Tout d'​abord,​ un exemple pour appréhender les notions utilisées dans cette page. \\
Ligne 59: Ligne 59:
 ==== Syntaxes ==== ==== Syntaxes ====
  
-Pour ces **regexp**, ​__Différents ​programmes__ //​utilisent//​ __différentes syntaxes__, de ce fait leur __symbolique peut être différente__ ​il faut donc bien distinguer le contexte où interviennent les **regexp**.+Pour ces **regexp**, ​__différents ​programmes__ //​utilisent//​ __différentes syntaxes__, de ce fait leurs __symboliques peuvent ​être différentes__ ​il faut donc bien distinguer le contexte où interviennent les **regexp**.
  
-Par exemple, un **regexp** destiné à l'​utilisation d'une commande [[commande:sed]], [[manuel:find]], [[commande:locate]] ou [[commande:grep]], devra être écrit différemment dans le contexte de __l'​utilisation d'une commande **bash**__ (voir : [[commande:​les_metacaracteres | Bash - Les metacaractères (Pattern - Glob)]]).+Par exemple, un **regexp** destiné à l'​utilisation d'une commande [[:​doc:​systeme:sed]], [[:​doc:​systeme:find]], [[:​doc:​systeme:locate]] ou [[:​doc:​systeme:grep]], devra être écrit différemment ​que dans le contexte de __l'​utilisation d'une commande **bash**__ (voir : [[commande:​les_metacaracteres | Bash - Les metacaractères (Pattern - Glob)]]).
  
 //Idem pour des contextes différents...//​ //Idem pour des contextes différents...//​
  
 Pour être clair dans ce wiki, Pour être clair dans ce wiki,
-  - nous indiquerons le terme REGEXP pour ce qui concerne le contexte //find - locate - grep - sed// +  - nous indiquerons le terme **REGEXP** pour ce qui concerne le contexte //find - locate - grep - sed// 
-  - et nous utiliserons le terme GLOB pour ce qui concerne le contexte du //bash//.+  - et nous utiliserons le terme **GLOB** pour ce qui concerne le contexte du //bash//.
  
 ==== Illustration ==== ==== Illustration ====
Ligne 77: Ligne 77:
 == Pour bash : == == Pour bash : ==
  
-Pour avoir la même expression ​pour bash, il faut écrire : ''​pl{o,​i}p''​ +Pour avoir la même expression ​avec bash, il faudra ​écrire : ''​pl{o,​i}p''​. \\ 
- +Nous voyons ​donc que dans le contexte **bash**, il faudra utiliser((à la place des caractères //​crochets//​ ''​[...]''​ de l'​exemple précédent)) ​les caractères //​accolades//​ ''​{ }''​ pour définir les **glob** concernant les mêmes chaînes de caractères ''​plop plip''​.
-Nous voyons que dans le contexte **bash**, il faudra ​plutôt ​utiliser les caractères //​accolades//​ ''​{ }''​ pour définir les **glob** concernant les mêmes chaînes de caractères ''​plop plip''​.+
  
 ==== Conclusion ==== ==== Conclusion ====
  
-Il y a donc bien lieu d'__utiliser ​les bons termes__ ​pour rédiger une commande au résultat identique ​__selon ​le bon contexte__. \\+Il y a donc bien lieu d'__//​utiliser ​les bons termes//​__ ​pour rédiger une commande au résultat identique ​__//​selon ​le bon contexte//​__. \\
 C'est pourquoi ce tuto s'​attache particulièrement à différencier ce contexte d'​utilisation. C'est pourquoi ce tuto s'​attache particulièrement à différencier ce contexte d'​utilisation.
  
 ===== REGEXP - Utilisation pour sed find grep locate ===== ===== REGEXP - Utilisation pour sed find grep locate =====
  
-Dans ce tuto, nous allons donc nous intéresser aux ''​regexp'' ​utilisées par+Dans ce tuto, nous allons donc nous intéresser aux **regexp** utilisées par
 **sed**, **find**, **grep** et **locate** (sensiblement les mêmes). **sed**, **find**, **grep** et **locate** (sensiblement les mêmes).
  
 ==== Préparation pour executer les TP ==== ==== Préparation pour executer les TP ====
  
-  - [[manuel:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) +Nous allons ici utiliser ​[[:doc:editeurs:vim]], l'​éditeur fétiche des amoureux du terminal ! ;-)
-  - [[manuel:​vim]] ​- L'​éditeur fétiche des amoureux du terminal !+
  
-Pour réaliser les TP mis en exemple dans ce tuto, il vous faut préparer ces  ​répertoire ​et fichier, permettant d'​accomplir les TP qui vont suivre. \\ +Pour réaliser les TP mis en exemple dans ce tuto, il vous faut préparer ces répertoires ​et fichiers. \\ 
-Créer le repertoire ​''​tuto_regexp''​ dans votre ''/​home/​user''​ : +Créer le repertoire ''/​home/​user/​tuto_regexp''​ : 
-<​code ​bash+<​code ​user
-mkdir /home/user/​tuto_regexp</​code>​+mkdir ~/​tuto_regexp</​code>​
  
-Compléter ce répertoire ​avec les TP qui suivent. \\  +Compléter ce répertoire ​comme indiqué dans les TP qui suivent. \\  
-Nous seront ainsi fin prêt pour réaliser les TP mis en exemple dans ce tuto ! ;-)+Nous seront ainsi fin prêts ​pour réaliser les TP mis en exemple dans ce tuto ! :-)
  
 === TP-01 === === TP-01 ===
  
 Créer le fichier abraca et y inscrire le mot : ''​Abracadabrantesque''​ ainsi : Créer le fichier abraca et y inscrire le mot : ''​Abracadabrantesque''​ ainsi :
-<​code ​bash+<​code ​user
-vim /home/user/​tuto_regexp/​abraca</​code>​+vim ~/​tuto_regexp/​abraca</​code>​
  
-et taper :+et écrire ​:
    ​Abracadabrantesque    ​Abracadabrantesque
  
Ligne 122: Ligne 120:
 Ces caractères suivants ont un statut particulier dans les **regexp** : Ces caractères suivants ont un statut particulier dans les **regexp** :
  
-   ^ . [ ] $ * { } \+  * L'​accent circonflexe : '' ​''​ 
 +  * Le point : '' ​''​ 
 +  * Les crochets doubles : ''​[ ] ''​ 
 +  * Le signe dollar : '' ​''​ 
 +  ​L'​étoile : ''​ * ''​ 
 +  * Les accolades doubles : '' ​{ } ''​  
 +  * L'​anti-slash : '' ​''​
  
-Avec les **regexp**, les shells ​(lignes de commande) ​effectuent certaines substitutions dans les commandes entrées par les utilisateurs avant de les exécuter.+Avec les **regexp**, les //shells// effectuent certaines substitutions dans les commandes entrées par les utilisateurs avant de les exécuter.
  
 ==== Les caractères ==== ==== Les caractères ====
  
-La première chose que l'on veut pouvoir reconnaître avec des motif, ce sont les +La première chose que l'on veut pouvoir reconnaître avec des motif, ce sont les mots que l'on peut écrire sans **REGEXP**. \\ 
-mots que l'on peut écrire sans **regexp**. \\ +**Exemple :**
-Exemple : +
    ​Abracadabrantesque    ​Abracadabrantesque
  
 Toutes ces lettres sont des caractères pouvant former une ''​regexp''​. \\  Toutes ces lettres sont des caractères pouvant former une ''​regexp''​. \\ 
-''​Abracadantesque''​ est donc déjà en soi une ''​regexp''​ reconnaissant exactement +''​Abracadantesque''​ est donc déjà en soi une ''​REGEXP''​ reconnaissant exactement le mot ''​Abracadabrantesque''​.
-le mot ''​Abracadabrantesque''​.+
  
 ==== Les jokers ==== ==== Les jokers ====
- 
  
 ''​A.racadabrant....e''​ ''​A.racadabrant....e''​
  
-Comme vous l'​aurez compris, les ''​.'' ​(points) ​signifient //​n'​importe quel caractère//​. \\ +Comme vous l'​aurez compris, les points ​''​.''​ signifient //​n'​importe quel caractère//​. \\ 
-La chaîne ci-dessus est une ''​regexp'' ​qui reconnaît exactement les caractères entrant dans le mot recherché. \\  +La chaîne ci-dessus est dans son ensemble ​une **REGEXP** ​qui reconnaît exactement les caractères entrant dans le mot recherché. \\  
-En effet, ''​.''​ (le point) est un caractère spécial reconnaissant //​n'​importe quel caractère//​. On appelle aussi ce caractère un ''​joker''​((En bash, le caractère joker est ''?''​))+En effet, ''​.''​ (le point) est un caractère spécial reconnaissant //​n'​importe quel caractère//​. 
 +<note tip>On appelle aussi ce caractère un ''​joker''​((En bash, le caractère joker est ''?''​))</​note>​
  
-=== TP 01 : ===+=== TP 02 : ===
  
  
doc/programmation/shell/regexp.txt · Dernière modification: 05/07/2023 11:44 par Croutons

Pied de page des forums

Propulsé par FluxBB