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:shells:bash-vii-globs-etendus-regex [07/10/2015 17:56] milou [Bash : Variables, globs étendus, ERb, ERe] |
doc:programmation:shells:bash-vii-globs-etendus-regex [07/10/2015 18:42] milou [Bash : Variables, globs étendus, ERb, ERe] |
||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
* Niveau requis : {{tag>avisé}} | * Niveau requis : {{tag>avisé}} | ||
* Commentaires : FIXME | * Commentaires : FIXME | ||
- | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
* Suivi : | * Suivi : | ||
* Création par [[user>Hypathie]] le 10/04/2014 | * Création par [[user>Hypathie]] le 10/04/2014 | ||
* Testé par [[user>Hypathie]] Avril 2014 | * Testé par [[user>Hypathie]] Avril 2014 | ||
- | * Commentaires sur le forum : [[:url-invalide | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | + | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=140928#p140928 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) |
Ligne 33: | Ligne 32: | ||
====Rappel : les métacaractères==== | ====Rappel : les métacaractères==== | ||
- | __Le premier type de représentation symbolique__ se fait avec [[doc:programmation:shell:les-metacaracteres|les globs ou patterns simples]]((désignés aussi de "caractères génériques")) ; ils servent aux recherches sur les chaînes de caractères et se font généralement en ligne de commandes.\\ Il a été donné un simple récapitulatif des caractères utilisés ici : [[atelier:chantier:bash-les-differents-caracteres-speciaux#definition-usuelle-de-metacaractere-et-detail|définition usuelle de métacaractère"]].\\ | + | __Le premier type de représentation symbolique__ se fait avec [[doc:programmation:shell:les-metacaracteres|les globs ou patterns simples]]((désignés aussi de "caractères génériques")) ; ils servent aux recherches sur les chaînes de caractères et se font généralement en ligne de commandes.\\ Il a été donné un simple récapitulatif des caractères utilisés ici : [[doc:programmation:shells:bash-les-differents-caracteres-speciaux#definition-usuelle-de-metacaractere-et-detail|définition usuelle de métacaractère"]].\\ |
====Distinguer le "globbing" étendu des expressions régulières ==== | ====Distinguer le "globbing" étendu des expressions régulières ==== | ||
- | __Le deuxième type de de représentation symbolique__ se fait (à partir de ''bash 2.01'') avec [[atelier:chantier:bash-vii-globs-etendus-regex#les-globs-etendus|les globs étendus ]]((appelés aussi "patterns longs" ; en anglais "extended patterns")), étudiés ci-dessous ; on les utilise pour effectuer des tests de correspondances simples, en ligne de commandes ou dans des scripts, ou pour [[atelier:chantier:man-bash-vi-les-caracteres-de-transformation-de-parametres|modifier les paramètres d'une variable]].\\ | + | __Le deuxième type de de représentation symbolique__ se fait (à partir de ''bash 2.01'') avec [[atelier:chantier:bash-vii-globs-etendus-regex#les-globs-etendus|les globs étendus ]]((appelés aussi "patterns longs" ; en anglais "extended patterns")), étudiés ci-dessous ; on les utilise pour effectuer des tests de correspondances simples, en ligne de commandes ou dans des scripts, ou pour [[doc:programmation:shells:man-bash-vi-les-caracteres-de-transformation-de-parametres|modifier les paramètres d'une variable]].\\ |
====Distinguer les expressions régulières utilisable avec le shell, de celles d'autres programmes==== | ====Distinguer les expressions régulières utilisable avec le shell, de celles d'autres programmes==== | ||
Ligne 89: | Ligne 88: | ||
>Cela signifie : liste-moi le ou les fichiers dont le nom ne comporte pas (''!'') | >Cela signifie : liste-moi le ou les fichiers dont le nom ne comporte pas (''!'') | ||
+ | > | ||
>soit "zéro ou plein de caractères" (''*'') puis ''jpg'' | >soit "zéro ou plein de caractères" (''*'') puis ''jpg'' | ||
+ | > | ||
>soit "zéro ou plein de caractères" (''*'') puis ''bmp'' | >soit "zéro ou plein de caractères" (''*'') puis ''bmp'' | ||
- | <code> | + | <file config retour de la commande> |
/home/hypathie/Test/nom.txt | /home/hypathie/Test/nom.txt | ||
- | </code> | + | </file> |
>C'est le chemin absolu (nom complet) du (ou des) autre(s) fichiers que ceux finissant par ''jpg'' ou ''bmp''. | >C'est le chemin absolu (nom complet) du (ou des) autre(s) fichiers que ceux finissant par ''jpg'' ou ''bmp''. | ||
Ligne 108: | Ligne 109: | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
nom.txt | nom.txt | ||
- | </code> | + | </file> |
>C'est le nom simplifié | >C'est le nom simplifié | ||
Ligne 149: | Ligne 150: | ||
- Contrairement à la correspondance simple rappelée au-dessus les doubles crochets sont obligatoires. C'est eux qui enclenchent le mécanisme de comparaison. On peut mettre un double égal, pour plus de clarté.\\ | - Contrairement à la correspondance simple rappelée au-dessus les doubles crochets sont obligatoires. C'est eux qui enclenchent le mécanisme de comparaison. On peut mettre un double égal, pour plus de clarté.\\ | ||
- Le "métacaractère" ou glob simple ''*'' signifie "un nombre quelconque de caractères" et le ''?'' signifie "un seul caractère", comme pour les globs simples.\\ | - Le "métacaractère" ou glob simple ''*'' signifie "un nombre quelconque de caractères" et le ''?'' signifie "un seul caractère", comme pour les globs simples.\\ | ||
- | - CES SIGNIFICATIONS SONT CONSERVÉES lors de l'emploi des globs étendus, et leurs significations et conservée mais s'applique à une syntaxe différentes dans les expressions régulières.\\ | + | - CES SIGNIFICATIONS SONT CONSERVÉES lors de l'emploi des globs étendus, et leurs significations sont conservées mais s'appliquent à une syntaxe différente dans les expressions régulières.\\ |
- Ne surtout pas mettre de ''" "'' autour de ''*'' : le shell chercherait alors les chaînes dont le premier caractère est une ''*'', ni dans les cas simples, ni lorsqu'on utilise les motifs étendus. | - Ne surtout pas mettre de ''" "'' autour de ''*'' : le shell chercherait alors les chaînes dont le premier caractère est une ''*'', ni dans les cas simples, ni lorsqu'on utilise les motifs étendus. | ||
</note> | </note> | ||
Ligne 157: | Ligne 158: | ||
Bash peut utiliser les expressions régulières mais de façon restreinte ; | Bash peut utiliser les expressions régulières mais de façon restreinte ; | ||
- | * elles ne peuvent pas être utilisée comme modèle de comparaison avec des noms de fichier ou pour effectuer des recherches en ligne de commandes. | + | * elles ne peuvent pas être utilisées comme modèle de comparaison avec des noms de fichier ou pour effectuer des recherches en ligne de commandes. |
* elles ne peuvent pas servir à modifier le contenu d'un fichier. | * elles ne peuvent pas servir à modifier le contenu d'un fichier. | ||
- | Elles servent seulement à "matcher" des variables, et elles ne s'utilisent que dans le cadres des scripts.\\ | + | Elles servent seulement à "matcher" des variables, et elles ne s'utilisent que dans le cadre des scripts.\\ |
Depuis __Bash 3.0__, on peut pour se faire utiliser l'opérateur **''=~''**.\\ | Depuis __Bash 3.0__, on peut pour se faire utiliser l'opérateur **''=~''**.\\ | ||
Cet opérateur **''=~''** permet : | Cet opérateur **''=~''** permet : | ||
- | * de vérifier la correspondre entre une chaîne (valeur d'une variable à gauche) et le modèle regex à droite ; | + | * de vérifier la correspondance entre une chaîne (valeur d'une variable à gauche) et le modèle regex à droite ; |
* ou encore de vérifier la correspondance entre une variable (constituée d'une chaîne de caractères littérales), et une variable constituée d'une regex. | * ou encore de vérifier la correspondance entre une variable (constituée d'une chaîne de caractères littérales), et une variable constituée d'une regex. | ||
Ligne 172: | Ligne 173: | ||
Si la syntaxe du pattern n'est pas valide le code de retour est 2.\\ | Si la syntaxe du pattern n'est pas valide le code de retour est 2.\\ | ||
- | Lorsqu'une chaîne correspond, chacune des parties du motif sont disponibles dans la variable ''$BASH_REMATCH''. | + | Lorsqu'une chaîne correspond, chacune des parties du motif est disponible dans la variable ''$BASH_REMATCH''. |
</note> | </note> | ||
==== Caractères servant aux expressions régulières de correspondance avec une variable==== | ==== Caractères servant aux expressions régulières de correspondance avec une variable==== | ||
Ligne 274: | Ligne 275: | ||
> '' ^ '' : début de l'expression | > '' ^ '' : début de l'expression | ||
- | > ''<nowiki>([[:alpha:][:blank:]]*)</nowiki>'' : | + | > ''<nowiki>([[:alpha:][:blank:]]*)</nowiki>'' : |
+ | > | ||
>entre parenthèses: première sous-expression, | >entre parenthèses: première sous-expression, | ||
- | >avec une paire de crochets contenant deux autres paires de crochets ''[:apha:]'' et ''[:blank:]'', | + | > |
+ | >avec une paire de crochets contenant deux autres paires de crochets ''[:apha:]'' et ''[:blank:]'', | ||
+ | > | ||
>avec ''*'' pour signifier que le groupe [alpha et blank] doivent apparaître 0 ou plusieurs fois ; suivi d'un espace. | >avec ''*'' pour signifier que le groupe [alpha et blank] doivent apparaître 0 ou plusieurs fois ; suivi d'un espace. | ||
> '' - '' : un tiret avec un espace après comme dans l'expression littérale. | > '' - '' : un tiret avec un espace après comme dans l'expression littérale. | ||
- | > ''<nowiki>([[:digit:]]*) - ([[:alpha:]]?)</nowiki>'' : une sous expression faite d'un groupe composé d'un nombre quelconque d'alphanumérique, un espace, un tiret, une autre sous-expression qui apparaît 0 ou 1 fois (''?''). | + | > ''<nowiki>([[:digit:]]*) - ([[:alpha:]]?)</nowiki>'' : une sous expression faite d'un groupe composé d'un nombre quelconque d'alphanumérique, un espace, un tiret, une autre sous-expression qui apparaît |
+ | > | ||
+ | >0 ou 1 fois (''?''). | ||
- | > La sous-expression ''(.*)'' signifie n'importe quel nombre ( ''*'' ) de tout caractères (''.''), | + | > La sous-expression ''(.*)'' signifie n'importe quel nombre ( ''*'' ) de tous caractères (''.''), |
- | >puis littéralement ''jpg'', | + | > |
+ | >puis littéralement ''jpg'', | ||
+ | > | ||
>puis ''$'' qui signifie fin de l'expression. | >puis ''$'' qui signifie fin de l'expression. | ||
Ligne 412: | Ligne 420: | ||
Récapitulatif selon deux types d'expressions régulières :\\ | Récapitulatif selon deux types d'expressions régulières :\\ | ||
- | -les expressions régulière basiques ERb\\ | + | -les expressions régulières basiques ERb\\ |
-les expressions régulières étendues ERe\\ | -les expressions régulières étendues ERe\\ | ||
Ligne 427: | Ligne 435: | ||
|**''<nowiki> \> </nowiki>''** |Fin d'un mot| | |**''<nowiki> \> </nowiki>''** |Fin d'un mot| | ||
|**''<nowiki>[liste_de_caractères]</nowiki>''** |Un caractère cité dans la liste | | |**''<nowiki>[liste_de_caractères]</nowiki>''** |Un caractère cité dans la liste | | ||
- | |**''<nowiki>[^liste_de_caractères]</nowiki>''** |Un carcatère qui n'est pas dans la liste | | + | |**''<nowiki>[^liste_de_caractères]</nowiki>''** |Un caractère qui n'est pas dans la liste | |
* Exemples : | * Exemples : | ||
Ligne 464: | Ligne 472: | ||
* Tous sont utilisables avec grep -E et egrep | * Tous sont utilisables avec grep -E et egrep | ||
- | * Tous sont utilisable avec awk | + | * Tous sont utilisables avec awk |
* Certains posent problème avec sed -r | * Certains posent problème avec sed -r | ||
Ligne 478: | Ligne 486: | ||
|**''<nowiki>(er)*</nowiki>''**|zéro ou plus de zéro chaîne(s) consécutive(s) validée(s) par "er" | | |**''<nowiki>(er)*</nowiki>''**|zéro ou plus de zéro chaîne(s) consécutive(s) validée(s) par "er" | | ||
|**''<nowiki>(er)?</nowiki>''**|une chaîne bulle ou toute chaîne validée par "er".| | |**''<nowiki>(er)?</nowiki>''**|une chaîne bulle ou toute chaîne validée par "er".| | ||
- | |**''<nowiki>[c1c2...]</nowiki>''**|Tout caractère expressément listé entre les crochets.| | + | |**''<nowiki>[c1c2...]</nowiki>''**|Tout caractère expressement listé entre les crochets.| |
|**''<nowiki>[^c1c2...]</nowiki>''**|Tout caractère excepté ceux qui sont expressément listés entre les crochets.| | |**''<nowiki>[^c1c2...]</nowiki>''**|Tout caractère excepté ceux qui sont expressément listés entre les crochets.| | ||
|**''<nowiki>[c1-c2]</nowiki>''**|Tout caractère appartenant à l’intervalle c1 c2, bornes comprises.| | |**''<nowiki>[c1-c2]</nowiki>''**|Tout caractère appartenant à l’intervalle c1 c2, bornes comprises.| | ||
Ligne 512: | Ligne 520: | ||
====Pour aller plus loin ==== | ====Pour aller plus loin ==== | ||
- | Pour les PCRE (perl) supportée par egrep (grep -E ; sed et et awk ) voir [[http://www.unix.com/man-page/linux/3/pcresyntax/|pcresyntax(3)]] et [[http://manpages.courier-mta.org/htmlman3/pcresyntax.3.html|pcrepattern(3)]]\\ | + | Pour les PCRE (perl) supportée par egrep (grep -E ; sed et et awk ) voir [[http://www.unix.com/man-page/linux/3/pcresyntax/|pcresyntax(3)]] et %%[[http://manpages.courier-mta.org/htmlman3/pcresyntax.3.html|pcrepattern(3)]]%% - Lien Obsolète\\ |
Et en français [[http://www.expreg.com/pcre.php]] | Et en français [[http://www.expreg.com/pcre.php]] | ||
Ligne 570: | Ligne 578: | ||
=====tuto précédent :===== | =====tuto précédent :===== | ||
- | [[atelier:chantier:man-bash-vi-les-caracteres-de-transformation-de-parametres|Bash : les caractères de transformation de parametres]] | + | [[doc:programmation:shells:man-bash-vi-les-caracteres-de-transformation-de-parametres|Bash : les caractères de transformation de parametres]] |