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 [09/07/2014 10:37] Hypathie [Correspondance de motifs avec les globs étendus] |
doc:programmation:shells:bash-vii-globs-etendus-regex [09/07/2014 11:26] Hypathie [Correspondance de motifs avec les globs étendus] |
||
---|---|---|---|
Ligne 24: | Ligne 24: | ||
La "représentation symbolique"((en anglais : "matching")) de caractères alpha-numériques par des "métacaractères"((termes employé là dans un sens général)) est de deux types. Et on peut distinguer ces deux types relativement à l'utilisation que l'on en a :\\ | La "représentation symbolique"((en anglais : "matching")) de caractères alpha-numériques par des "métacaractères"((termes employé là dans un sens général)) est de deux types. Et on peut distinguer ces deux types relativement à l'utilisation que l'on en a :\\ | ||
- | - __sélectionner__ des noms de fichiers dans un répertoire (on recherche par exemple différents noms de fichiers) ;\\ | + | - __sélectionner__ des noms de fichiers dans un répertoire ;\\ |
- __déterminer__ si une chaîne est conforme à un format désiré.\\ | - __déterminer__ si une chaîne est conforme à un format désiré.\\ | ||
===Rappel : === | ===Rappel : === | ||
- | __Le premier type de représentation symbolique__ se fait avec [[doc:programmation:shell:les-metacaracteres|les globs ou patterns simples]] ; ils servent aux recherches sur les chaînes de caractères se font généralement en ligne de commandes, et il a été donné simple récapitulatif des caractères utilisés ici : [[atelier:chantier:bash-les-differents-caracteres-speciaux#metacaracteres-et-meta-caracteres|méta-caractères et métacaractères]].\\ | + | __Le premier type de représentation symbolique__ se fait avec [[doc:programmation:shell:les-metacaracteres|les globs ou patterns simples]] ; 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é simple récapitulatif des caractères utilisés ici : [[atelier:chantier:bash-les-differents-caracteres-speciaux#metacaracteres-et-meta-caracteres|méta-caractères et métacaractères]].\\ |
===Distinguer le "globbing" étendu des expressions régulières === | ===Distinguer le "globbing" étendu des expressions régulières === | ||
Ligne 63: | Ligne 63: | ||
Notons l'option shopt -s nocasematch (bash version 3.1) permet de retirer la sensibilité à la case. | Notons l'option shopt -s nocasematch (bash version 3.1) permet de retirer la sensibilité à la case. | ||
- | ====Les globs étendus dans le terminal==== | + | ====Les globs étendus dans le terminal==== |
- | Par exemple, prenons un fichier de type répertoire nommé "Test" contenant les fichiers : image.bmp image.jpg nom.txt | + | |
+ | ===Préparation=== | ||
+ | <code user> | ||
+ | mkdir Test && cd Test && touch image.bmp image.jpg nom.txt && cd .. | ||
+ | </code> | ||
+ | >Création d'un fichier de type répertoire nommé "Test", contenant les fichiers : image.bmp image.jpg nom.txt | ||
+ | |||
+ | ===Exercice=== | ||
<code user> | <code user> | ||
shopt -s extglob | shopt -s extglob | ||
</code> | </code> | ||
- | Valider ensuite toujours dans le même terminal : | + | |
+ | >Pour les commandes qui suivent, il faut valider toujours dans le même terminal. | ||
<code user> | <code user> | ||
ls ~/Test/!(*jpg|*bmp) | ls ~/Test/!(*jpg|*bmp) | ||
</code> | </code> | ||
+ | |||
+ | >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 ''bmp'' | ||
+ | |||
<code> | <code> | ||
/home/hypathie/Test/nom.txt | /home/hypathie/Test/nom.txt | ||
</code> | </code> | ||
- | Ou encore avec le même exemple : | + | >C'est le chemin absolu (nom complet) du (ou des) autre(s) fichiers que ceux finissant par ''jpg'' ou ''bmp''. |
+ | |||
+ | * à propos de cet exemple : | ||
<code user> | <code user> | ||
cd ~/Test/ | cd ~/Test/ | ||
</code> | </code> | ||
- | PUIS : | + | |
<code user> | <code user> | ||
- | ls | + | ls !(*jpg|*bmp) |
- | </code> | + | |
- | Retour : | + | |
- | <code> | + | |
- | image.bmp image.jpg nom.txt | + | |
- | </code> | + | |
- | PUIS : | + | |
- | <code user> | + | |
- | echo !(*jpg|*bmp) | + | |
</code> | </code> | ||
+ | |||
<code> | <code> | ||
nom.txt | nom.txt | ||
</code> | </code> | ||
+ | |||
+ | >C'est le nom simplifié | ||
==== Les globs étendus dans les scripts==== | ==== Les globs étendus dans les scripts==== | ||
Ligne 138: | Ligne 149: | ||
=====Correspondance de motifs avec les expressions rationnelles===== | =====Correspondance de motifs avec les expressions rationnelles===== | ||
- | ==== L'opérateur de correspondance =~ d'une expression rationnelle dans une expression de tests [[ ]] ==== | + | ==== L'opérateur de correspondance =~ ==== |
- | Certaines expressions régulières peuvent être utilisées avec bash, mais elles ne peuvent pas être utilisée comme modèle de comparaison avec des noms de fichier pour effectuer des recherches en ligne de commandes. Elles matchent des variables et s'utilisent dans le cadres des scripts.\\ | + | 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 servent seulement à "matcher" des variables, et elles ne s'utilisent que dans le cadres des scripts.\\ |
- | Les expressions régulières reconnues par Bash sont nommées ERE ("expression régulière étendues").\\ | + | Depuis __Bash 3.0__, on peut pour se faire utiliser l'opérateur ''=~''.\\ Cet opérateur ''=~'' permet : |
- | Depuis __Bash 3.0__, on peut pour se faire utiliser l'opérateur ''=~''.\\ Cet opérateur ''=~'' permet alors de vérifier la correspondre entre une chaîne (valeur d'une variable à gauche) et le modèle regex à droite.\\ | + | * de vérifier la correspondre 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. |
- | Voici quelques liens qui présentent la syntaxe et les caractères utilisables avec Bash sans les commandes grep, sed, awk.\\ | + | |
+ | Voici quelques liens qui présentent la syntaxe et les caractères utilisables avec Bash (sans les commandes ''grep'', ''sed'', ''awk'').\\ | ||
* [[http://mywiki.wooledge.org/RegularExpression]]\\ | * [[http://mywiki.wooledge.org/RegularExpression]]\\ | ||
* [[https://en.wikipedia.org/wiki/Regular_expression#Standards]]\\ | * [[https://en.wikipedia.org/wiki/Regular_expression#Standards]]\\ | ||
+ | <note> | ||
+ | À savoir :\\ | ||
Lorsque la chaîne correspond au motif, le code retour du test renvoie 0 pour vrai, sinon, il renvoie 1 pour faux.\\ | Lorsque la chaîne correspond au motif, le code retour du test renvoie 0 pour vrai, sinon, il renvoie 1 pour faux.\\ | ||
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 sont disponibles dans la variable ''$BASH_REMATCH''. |
- | + | </note> | |
- | ==== Liste des caractères utilisés dans les expressions régulières étendues==== | + | ==== Tableau des caractères utilisés dans les expressions régulières étendues==== |
**Voici les caractères utilisables :** | **Voici les caractères utilisables :** | ||
Ligne 178: | Ligne 192: | ||
- | ==== Apprenons à construire une expression régulière "bashiste"==== | + | ==== Apprenons à construire une expression régulière==== |
<code bash> | <code bash> | ||
Ligne 199: | Ligne 213: | ||
</code> | </code> | ||
- | + | * Ou encore : | |
- | Ou encore : | + | |
<code bash> | <code bash> | ||
Ligne 237: | Ligne 250: | ||
Le nom de l'image correspond à l'expression rationnelle. | Le nom de l'image correspond à l'expression rationnelle. | ||
</code> | </code> | ||
- | ===explication=== | + | |
+ | * Explication : | ||
> '' ^ '' : début de l'expression | > '' ^ '' : début de l'expression |