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:shell:regexp [22/09/2013 09:58] smolski [Introduction] |
doc:programmation:shell:regexp [22/09/2013 11:16] smolski [REGEXP] |
||
---|---|---|---|
Ligne 5: | Ligne 5: | ||
* Commentaires : //Les caractères spéciaux utilisés dans les commandes en ligne. // | * Commentaires : //Les caractères spéciaux utilisés dans les commandes en ligne. // | ||
* Débutant, à savoir : [[manuel:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | * Débutant, à savoir : [[manuel:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
- | * Suivi : {{tag>en-chantier à-tester}} | + | * Suivi : {{tag>à-cpompléter}} |
* Création par **smolski** 26/08/2013 | * Création par **smolski** 26/08/2013 | ||
- | * Testé par <...> le <...> | + | * Testé par **smolski** le 26/08/2013 |
* 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 !)) | * 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 !)) | ||
Ligne 87: | Ligne 87: | ||
===== 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 ! ;-) |
- | - [[:doc:editeurs: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épertoires et fichiers, 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êts 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 121: | 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> | ||
+ | |||
+ | ==== Les caractères échappés ==== | ||
+ | |||
+ | Tous nos caractères spéciaux ont des significations particulières, nous l'avons vu avec le .((point)), c'est vrai pour les autres. \\ | ||
+ | Ainsi, pour reconnaître chacun d'eux en tant que caractère non spécial, il faut l'échapper par un \((anti-slash)). | ||
+ | |||
+ | Ainsi la combinaison : ''\.''((anti-slash point)) reconnaît simplement ''.''((point)) \\ | ||
+ | Comme la combinaison : ''\\''((anti-slash antislash)) reconnaît ''\''((anti-slash)) \\ | ||
+ | Ou encore la combinaison : ''\\\.''((anti-slash anti-slash anti-slash point)) reconnaît \.((anti-slash point)) | ||
+ | |||
+ | //Eh oui !// :-D | ||
+ | |||
+ | ==== Les caractères répétition ==== | ||
+ | |||
+ | Quand on ne sait pas combien de fois un caractère va apparaître, on l'indique avec une étoile * \\ | ||
+ | |||
+ | **Exemple** : \\ | ||
+ | ''Ah*'' reconnaît aussi bien « Ah » que « Ahhhhhhhhhhhhhhhhhhhhhhhhhh » ou même « A » | ||
+ | |||
+ | Quand on ne sait pas si un caractère va apparaître une fois ou jamais, on l'indique avec un point d'interrogation échappé ''\?'' \\ | ||
+ | |||
+ | **Exemple** : \\ | ||
+ | La **REGEXP** : ''Chevals\?'' reconnaît aussi bien « Cheval » que « Chevals ». \\ | ||
+ | Autre exemple : ''coq\?uille'' | ||
+ | |||
+ | ==== Les ensembles de caractères possibles ==== | ||
+ | |||
+ | ''Par[lt]ez'' reconnaît aussi bien « Parlez » que « Partez ». \\ | ||
+ | ''[a-z]'' reconnaît n'importe quelle lettre minuscule (non altérée)2) de l'alphabet. \\ | ||
+ | ''[A-Za-z]'' reconnaît n'importe quelle lettre (non altérée) de l'alphabet. \\ | ||
+ | ''[0-9\-]'' reconnaît les chiffres et le caractère « - ». | ||
+ | |||
+ | === Remarque : === | ||
+ | Il y a aussi des classes de caractères déjà prédéfinies. | ||
+ | |||
+ | **Tableau des classes prédéfinies** [[http://www.commentcamarche.net/contents/php/phpreg.php3 | Source]] (merci titia) :-) | ||
+ | ^ classe ^ Resultat ^ | ||
+ | |[:alnum:] | caractères alphanumériques (équivalent à [A-Za-z0-9])| | ||
+ | |[:alpha:] | caractères alphabétiques ([A-Za-z])| | ||
+ | |[:blank:] | caractères blanc (espace, tabulation)| | ||
+ | |[:ctrl:] | caractères de contrôle (les premiers du code ASCII| | ||
+ | |[:digit:] | chiffre ([0-9])| | ||
+ | |[:graph:] | caractère d'imprimerie (qui fait une marque sur l'écran en quelque sorte)| | ||
+ | |[:print:] | caractère imprimable (qui passe à l'imprimante ... tout sauf les caractères de contrôle)| | ||
+ | |[:punct:] | caractère de ponctuation| | ||
+ | |[:space:] | caractère d'espacement| | ||
+ | |[:upper:] | caractère majuscule| | ||
+ | |[:xdigit:] | caractère hexadécimal| | ||
+ | |||
+ | ==== Les caractères interdits ==== | ||
+ | |||
+ | ''[^x]'' reconnaît tous les caractères sauf « x » \\ | ||
+ | ''[^xy]'' reconnaît tous les caractères sauf « x » et « y » \\ | ||
+ | ''[^a-z]'' reconnaît tous les caractères sauf les lettres minuscules non altérées | ||
+ | |||
+ | ==== Début et fin de ligne ==== | ||
+ | |||
+ | ''^'' désigne un début de ligne \\ | ||
+ | ''$'' désigne une fin de ligne | ||
- | === TP 01 : === | + | **Exemple :** |
+ | ''^Pouet'' reconnaîtra le motif //Pouet// s'il se trouve en début de ligne. | ||
+ | ==== Combinaisons ==== | ||
+ | ''[ab]*'' comme [ab] reconnaît aussi bien « a » que « b », [ab]* reconnaît aussi bien « aaaaaaaaa » que « abababbbbbbbbb » ou que « babbbaaa » \\ | ||
+ | ''Abra*[ca]*dabrante\?'' reconnaît les chaînes commençant par « Abr », suivi par un nombre quelconque de « a », puis un nombre quelconque de « c » et de « a » suivis par « dabrant », suivi ou non par « e ». | ||
+ | //De nombreux TP restent à suivre...// :-D | ||
===== Liens utiles : ===== | ===== Liens utiles : ===== | ||