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 [25/05/2014 15:42] Hypathie [Correspondance de motifs avec les globs étendus] |
doc:programmation:shells:bash-vii-globs-etendus-regex [03/06/2014 14:40] Hypathie [Correspondance de motifs avec les expressions rationnelles] |
||
---|---|---|---|
Ligne 13: | Ligne 13: | ||
1) Intro : [[atelier:chantier:bash-les-differents-caracteres-speciaux|Bash : Introduction]] | 1) Intro : [[atelier:chantier:bash-les-differents-caracteres-speciaux|Bash : Introduction]] | ||
- | 2) chap I : [[atelier:chantier:la-page-man-bash-les-caracteres-speciaux|caractères spéciaux|Bash : Détail et caractères]] | + | 2) chap I : [[atelier:chantier:la-page-man-bash-les-caracteres-speciaux|Bash : Détail et caractères]] |
3) chap II : [[atelier:chantier:la-page-man-bash-ii-les-operateurs-lexicographiques|Bash : les opérateurs lexicographiques]] | 3) chap II : [[atelier:chantier:la-page-man-bash-ii-les-operateurs-lexicographiques|Bash : les opérateurs lexicographiques]] | ||
Ligne 69: | Ligne 69: | ||
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. | ||
- | ====2)Les globs étendus ==== | + | ====2)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 | Par exemple, prenons un fichier de type répertoire nommé "Test" contenant les fichiers : image.bmp image.jpg nom.txt | ||
Ligne 93: | Ligne 93: | ||
#retour: nom.txt | #retour: nom.txt | ||
</code> | </code> | ||
- | ====3) Les globs étendus==== | + | ====3) Les globs étendus dans les scripts==== |
===Contexte :=== | ===Contexte :=== | ||
Tester une chaîne par rapport à un motif (représentatif) et non par rapport à une constante littérale.\\ | Tester une chaîne par rapport à un motif (représentatif) et non par rapport à une constante littérale.\\ | ||
Ligne 147: | Ligne 147: | ||
**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.** | ||
- | ====2) Liste des caractères utilisés dans les expressions régulières de type "bashiste"==== | + | ====2) Liste des caractères utilisés dans les expressions régulières étendues==== |
**Voici les caractères utilisables :** | **Voici les caractères utilisables :** | ||
^ "signes" regex ERE basique ^ signification (comparez avec le tableau de l'index) ^ | ^ "signes" regex ERE basique ^ signification (comparez avec le tableau de l'index) ^ | ||
Ligne 254: | Ligne 254: | ||
<note> | <note> | ||
- | DONC\\ | + | **DONC**\\ |
- | LES EXPRESSIONS RÉGULIÈRES UTILISÉES AVEC LE SHELL BASH NÉCESSITENT L'OPÉRATEUR =~\\ | + | **LES EXPRESSIONS RÉGULIÈRES UTILISÉES AVEC LE SHELL BASH NÉCESSITENT L'OPÉRATEUR =~**\\ |
- | ON Y RETROUVE CEUX DES CARACTÈRES GÉNERIQUES (globs) BASIQUES [ * [ ] ? ] (avec sens voisin mais étendus par une syntaxe particulière).\\ | + | **ON Y RETROUVE CEUX DES CARACTÈRES GÉNERIQUES (globs) BASIQUES [ * [ ] ? ] (avec sens voisin mais étendus par une syntaxe particulière).**\\ |
- | ON Y RETROUVENT CEUX DES CARACTÈTRES GÉNÉRIQUES ÉTENDUS [ | @ ! + ^] (là aussi avec une nouvelle syntaxe).\\ | + | **ON Y RETROUVENT CEUX DES CARACTÈTRES GÉNÉRIQUES ÉTENDUS [ | @ ! + ^] (là aussi avec une nouvelle syntaxe).**\\ |
- | LES NOUVEAUX CARACTÈRES SONT [ **,** dans { } **( )** **\n** ainsi que l'enchâssement de crochets simples].\\ | + | **LES NOUVEAUX CARACTÈRES SONT [ **,** dans { } **( )** **\n** ainsi que l'enchâssement de crochets simples.**\\ |
- | ELLES NE S'UTILISENT PAS AVEC LA SYNTAXE DE CORRESPONDANCE OU DE SUBSTITUTION DE TYPE | + | **ELLES NE S'UTILISENT PAS AVEC LA SYNTAXE DE CORRESPONDANCE OU DE SUBSTITUTION DE TYPE :** |
<code> | <code> | ||
$var/.../... | $var/.../... | ||
Ligne 269: | Ligne 269: | ||
$var//.../... | $var//.../... | ||
</code> | </code> | ||
- | C'EST LES ER D'AUTRES PROGRAMMES QUI RECOURENT À UNE SYNTAXE RESSEMBLANTE (voir index correspondance et substitution).\\ | + | **CE SONT LES ER D'AUTRES PROGRAMMES QUI RECOURENT À UNE SYNTAXE RESSEMBLANTE (voir index correspondance et substitution).**\\ |
- | BEAUCOUP DE CES MÉTA-CARATÈRES SONT IDENTIQUES À CEUX DES ER D'AUTRES PROGRAMMES (voir index). | + | **BEAUCOUP DE CES MÉTA-CARATÈRES SONT IDENTIQUES À CEUX DES ER D'AUTRES PROGRAMMES (comparez avec l'index)**. |
</note> | </note> | ||
- | ====4) Utilisation de la variable $BASH_REMATCH==== | + | ====4) un petit script pour s'exercer au ER==== |
+ | **Voici un petit script "exp.reg1" qui regroupe les notions étudiées jusqu'à présent.**\\ | ||
+ | Il a pour but de s'exercer aux expressions régulières.\\ | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | #Les "echo" les plus à droite sont là pour expliquer lors du retour ce qui s'y passe dans ce script. | ||
+ | |||
+ | VAR="$1" | ||
+ | echo "La valeur de VAR est: $VAR." | ||
+ | echo "Il y a "$#" paramètres." | ||
+ | echo "Le paramètre n°1 est "$1" (la 'ER')." | ||
+ | echo "Le paramètre n°2 est "$2" (deuxième argument, chaine1 à matcher)." | ||
+ | echo "Le paramètre n°2 est "$3" (le troisième argument, chaine2 à matcher." | ||
+ | echo " " | ||
+ | shift | ||
+ | echo "Avec 'shift', on se décale d'un paramètre." | ||
+ | echo "Après 'shift', il reste donc: "$#" paramètre(s)." | ||
+ | echo "Et ce(s) paramètre(s) sont: "$1", "$2"." | ||
+ | echo "("$1": ancien deuxième paramètre devenu paramètre 1 après shift)." | ||
+ | echo "("$2": ancien troisième paramètre devenu paramètre 2 après shift.)" | ||
+ | echo " " | ||
+ | echo "MAIS LA VALEUR DE VAR RESTE la 'ER' : "$VAR"." | ||
+ | for i in "$@" | ||
+ | do | ||
+ | echo " " | ||
+ | echo "'for i in \$@': la variable i aura, boucle après boucle, les VALEURS: "$@"," | ||
+ | echo "(attribués à chaque tour de boucle à variable "i".)" | ||
+ | echo "c'est-à-dire lors de la boucle n°1, elle est identique au paramètre n°1: "$1"." | ||
+ | echo "puis lors de la boule n°2, elle est identique au paramètre n°2 : "$2"." | ||
+ | echo " " | ||
+ | echo "On peut donc donner à grep la chaine:$i comme entrée par le tube," | ||
+ | echo "et comme motif le 'ER': $VAR." | ||
+ | echo "$i" | grep -E "$VAR" > /dev/null | ||
+ | if [ $? -eq 0 ] | ||
+ | then | ||
+ | echo " " | ||
+ | echo " BRAVO ! La ER: $VAR correspond au motif "$i" " | ||
+ | else | ||
+ | echo " " | ||
+ | echo " ERREUR ! La ER: $VAR ne correspond pas au motif: $i " | ||
+ | echo " " | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | # ligne 33 (if) : $? (code de retour) -eq (égal à) zéro (pas d'erreur de sortie, donc bonne correspondance) | ||
+ | </code> | ||
+ | |||
+ | **Lancez-le ainsi (explications détaillées dans le retour) :**\\ | ||
+ | (en considérant que le dossier parent de ce script figure dans $PATH, après modification du fichier ~/.bashrc\\ | ||
+ | voir : [[atelier:chantier:debuter-avec-les-scripts-shell-bash#executer-son-script-depuis-n-importe-ou|3) Exécuter son script depuis n'importe où !]]) | ||
+ | <code user> | ||
+ | exp.reg1 "^[a-b]" "abc" "ABC" # ER comme premier argument et le ou les chaînes à vérifier en second, troisième, etc. | ||
+ | </code> | ||
- | FIXME | ||
=====INDEX ===== | =====INDEX ===== | ||
====1) rappel des principaux caractères des expressions rationnelles ==== | ====1) rappel des principaux caractères des expressions rationnelles ==== | ||
Ligne 357: | Ligne 408: | ||
====2) ASCII==== | ====2) ASCII==== | ||
- | ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ | + | ^ ordre ^ caractère ^ ordre ^ caractère ^ ordre ^ caractère ^ ordre ^ caractère ^ ordre ^ caractère ^ ordre ^ caractère ^ |
- | |0 | NULL | 21 | NAK | 42 | * | 63 | ? | 84 | T | 105 | i | 126 | ~ | | + | |0 | NULL | 21 | NAK | 42 | * | 63 | ? | 84 | T | 105 | i | |
- | |1 | SOH | 22 | SYN | 43 | + | 64 | @ | 85 | U | 106 | j | 127 | DEL | | + | |1 | SOH | 22 | SYN | 43 | + | 64 | @ | 85 | U | 106 | j | |
- | |2 | STX | 23 | ETB | 44 | , | 65 | A | 86 | V | 107 | k || | + | |2 | STX | 23 | ETB | 44 | , | 65 | A | 86 | V | 107 | k | |
- | |3 | ETX | 24 | CAN | 45 | - | 66 | B | 87 | W | 108 | l || | + | |3 | ETX | 24 | CAN | 45 | - | 66 | B | 87 | W | 108 | l | |
- | |4 | EOT | 25 | EM | 46 | . | 67 | C | 88 | X | 109 | m || | + | |4 | EOT | 25 | EM | 46 | . | 67 | C | 88 | X | 109 | m | |
- | |5 | ENQ | 26 | SUB | 47 | / | 68 | D | 89 | Y | 110 | n || | + | |5 | ENQ | 26 | SUB | 47 | / | 68 | D | 89 | Y | 110 | n | |
- | |6 | ACK | 27 | ESC | 48 | 0 | 69 | E | 90 | Z | 111 | o || | + | |6 | ACK | 27 | ESC | 48 | 0 | 69 | E | 90 | Z | 111 | o | |
- | |7 | BEL | 28 | FS | 49 | 1 | 70 | F | 91 | [ | 112 | p || | + | |7 | BEL | 28 | FS | 49 | 1 | 70 | F | 91 | [ | 112 | p | |
- | |8 | BS | 29 | GS | 50 | 2 | 71 | G | 92 | \ | 113 | q || | + | |8 | BS | 29 | GS | 50 | 2 | 71 | G | 92 | \ | 113 | q | |
- | |9 | HT | 30 | RS | 51 | 3 | 72 | H | 93 | ] | 114 | r || | + | |9 | HT | 30 | RS | 51 | 3 | 72 | H | 93 | ] | 114 | r | |
- | |10 | LF | 31 | US | 52 | 4 | 73 | I | 94 | <code>^</code> | 115 | s || | + | |10 | LF | 31 | US | 52 | 4 | 73 | I | 94 | <code>^</code> | 115 | s | |
- | |11 | VT | 32 |space | 53 | 5 | 74 | J | 95 | - | 116 | t || | + | |11 | VT | 32 |space | 53 | 5 | 74 | J | 95 | - | 116 | t | |
- | |12 | FF | 33 | ! | 54 | 6 | 75 | K | 96 | ' | 117 | u || | + | |12 | FF | 33 | ! | 54 | 6 | 75 | K | 96 | ' | 117 | u | |
- | |13 | CR | 34 | " | 55 | 7 | 76 | L | 97 | a | 118 | v || | + | |13 | CR | 34 | " | 55 | 7 | 76 | L | 97 | a | 118 | v | |
- | |14 | SO | 35 | # | 56 | 8 | 77 | M | 98 | b | 119 | w || | + | |14 | SO | 35 | # | 56 | 8 | 77 | M | 98 | b | 119 | w | |
- | |15 | SI | 36 | $ | 57 | 9 | 78 | N | 99 | c | 120 | x || | + | |15 | SI | 36 | $ | 57 | 9 | 78 | N | 99 | c | 120 | x | |
- | |16 | DLE | 37 | % | 58 | : | 79 | O | 100 | d | 121 | y || | + | |16 | DLE | 37 | % | 58 | : | 79 | O | 100 | d | 121 | y | |
- | |17 | DC1 | 38 | & | 59 | ; | 80 | P | 101 | e | 122 | z || | + | |17 | DC1 | 38 | & | 59 | ; | 80 | P | 101 | e | 122 | z | |
- | |18 | DC2 | 39 | ' | 60 | < | 81 | Q | 102 | f | 123 | { || | + | |18 | DC2 | 39 | ' | 60 | < | 81 | Q | 102 | f | 123 | { | |
- | |19 | DC3 | 40 | ( | 61 | = | 82 | R | 103 | g | 124 |<code>|</code> || | + | |19 | DC3 | 40 | ( | 61 | = | 82 | R | 103 | g | 124 |<code>|</code> | |
- | |20 | DC4 | 41 | ) | 62 | > | 83 | S | 104 | h | 125 | } || | + | |20 | DC4 | 41 | ) | 62 | > | 83 | S | 104 | h | 125 | } | |
+ | |||
+ | ^ordre^ caractère ^ | ||
+ | |126 | ~ | | ||
+ | | 127 | DEL | | ||
===tuto précédent :=== | ===tuto précédent :=== |