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 | ||
utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes [13/08/2014 17:48] Hypathie [Les expressions rationnelles basiques et les commandes GNU/Linux] |
utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes [13/08/2014 18:37] Hypathie [Les expressions rationnelles basiques et les commandes GNU/Linux] |
||
---|---|---|---|
Ligne 679: | Ligne 679: | ||
toutefois | toutefois | ||
</code> | </code> | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | =====Caractères spécifiques aux ERb et ERe ===== | ||
- | |||
- | <note tip> | ||
- | Je présenterai ici les commandes qui utilisent uniquement les ERb, c'est-à-dire, celles qui n'ont pas besoin d'une option pour utiliser les expressions rationnelles et qui n'utilisent que les expressions rationnelles basiques, et donc forcément les caractères spécifiques aux ERb.\\ | ||
- | Il s'agit de **''expr''** et **''vi''**.\\ | ||
- | |||
- | Elles utilisent bien sûr tous [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#caracteres-communs-aux-erb-et-ere|les caractères communs aux ERb et ERe]], leur utilisation avec ces caractères apparaîtra en à côté de l'utilisation des caractères spécifiques aux ERb qui permettent de décrire des motifs plus complexes. | ||
- | |||
- | Pour les commandes "à option" qui utilisent tous les caractères spécifiques aux ERb, mais qui peuvent aussi utiliser ces mêmes caractères((parenthèses, accolades, +, ? et |)) sans antislash avec les ERe, je présenterai rapidement leur utilisation des ERb dans le chapitre sur les caractères spécifiques aux ERe. | ||
- | </note> | ||
- | |||
- | ====Caractères spécifiques aux ERb ==== | ||
- | |||
- | Toutes les commandes utilisant les expressions rationnelles basiques utilisent les caractères énumérés ci-dessous.\\ | ||
- | |||
- | La commande **''expr''** n'utilise que ceux-ci.\\ | ||
- | |||
- | ^expressions ^Modèles reconnus ^ | ||
- | |**''<nowiki>\{m\}</nowiki>''** | m fois le caractère précédent | | ||
- | |**''<nowiki>\{m,\} </nowiki>''** | au moins m fois le caractère précédent | | ||
- | |**''<nowiki>\{m,n\} </nowiki>''** | entre m et n fois le caractère précédent | | ||
- | |**''<nowiki>\(ERb\)</nowiki>''** | mémorisation d'une ERb | | ||
- | |**''<nowiki>\1, \2, ...</nowiki>''** | Rappel de mémorisation | | ||
- | |||
- | Les commandes **''grep''** (ou **''grep -G''**) ; **''find -regextype "posix-basic" ''** ; | ||
- | **''locate --regexp''** ; **''sed''**; **''vi''** utilisent en plus ces caractères ci-dessous : | ||
- | |||
- | ^ ^ ^ | ||
- | |**''<nowiki>\?</nowiki>''** | zéro ou une fois l'élément précédent | | ||
- | |**''<nowiki>\+</nowiki>''** | une ou plusieurs fois l'élément précédent | | ||
- | |**''<nowiki>\|</nowiki>''** | alternative | | ||
- | |||
- | -> Le caractère **''\''** donne une signification spéciale aux parenthèses et accolades, ?, +, | au lieu de les rendre littérales.\\ | ||
- | Mais il permet de rendre littéraux les autres caractères des ERb, par exemple ''\.'' permet de sélectionner un point. | ||
- | |||
- | |||
- | ====Caractères spécifiques aux ERe ==== | ||
- | |||
- | Les caractères spécifiques aux ERe sont utilisables avec les commandes : | ||
- | |||
- | **''grep -E''** ; (ou **''egrep''**) ; **''find -regextype "posix-extended" ''** ; | ||
- | **''locate --regex''** ; **''sed -r''** et **''awk''**((alias gawk)).\\ | ||
- | |||
- | Bien évidemment tous [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#caracteres-communs-aux-erb-et-ere|les caractères communs aux ERb et ERe]] sont utilisables avec ces commandes et ces options. | ||
- | |||
- | ^expressions ^ Modèles reconnus ^ | ||
- | |**''?''** | zéro ou une fois le caractère ou le regroupement précédent | | ||
- | |**''+''** |une à n fois le caractère ou regroupement précédent | | ||
- | |**''<nowiki>{m}</nowiki>''** |m fois le caractère précédent | | ||
- | |**''<nowiki>{m,}</nowiki>''** | m fois le caractère précédent | | ||
- | |**''<nowiki>{m,n}</nowiki>''** | entre m et n fois le caractère précédent | | ||
- | |**''<nowiki>( er1)</nowiki>''** | regroupement | | ||
- | |**''<nowiki>er1|er2|er3</nowiki>''** | alternative | | ||
- | |**''<nowiki>(er)+</nowiki>''**|Une ou plus de une chaîne(s) consécutive(s) validée(s) "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>[c1c2...]</nowiki>''**|Tout caractère expressément listé 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>er1|er2</nowiki>''**|Toute chaîne de caractères validée soit par er1 soit par er2.| | ||
- | |**''<nowiki>(er)(er)</nowiki>''**|Toute chaîne validée par l’expression er, chaîne vide exclue.| | ||
- | |**''<nowiki>(er1)(er2)</nowiki>''**|Toute chaîne de caractères de type AB, dans laquelle l’expression régulière er1 valide A et l’expression régulière er2 valide B.\\ Avec awk uniquement| | ||
- | |||
- | =====Les commandes expr et vi et les caractères spécifiques aux ERb ===== | ||
====La commande expr n'utilise que ERb==== | ====La commande expr n'utilise que ERb==== | ||
Ligne 784: | Ligne 712: | ||
* L'expression rationnelle est comparée par rapport au début de la variable, le caractère **''^''** est toujours implicite. | * L'expression rationnelle est comparée par rapport au début de la variable, le caractère **''^''** est toujours implicite. | ||
* Si une partie de l'expression rationnelle est mémorisée avec **''\( \)''** la commande expr affiche dans le terminal la partie correspondante. | * Si une partie de l'expression rationnelle est mémorisée avec **''\( \)''** la commande expr affiche dans le terminal la partie correspondante. | ||
- | * **''expr''** utilise tous les [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#caracteres-communs-aux-erb-et-ere|caractères communs aux ERb et ERe]] | ||
- | * mais elle n'utilise que les caractères spécifiques aux ERb ci-dessous : | ||
- | |**''<nowiki>\{m\}</nowiki>''** | m fois le caractère précédent | | ||
- | |**''<nowiki>\{m,\} </nowiki>''** | au moins m fois le caractère précédent | | ||
- | |**''<nowiki>\{m,n\} </nowiki>''** | entre m et n fois le caractère précédent | | ||
- | |**''<nowiki>\(ERb\)</nowiki>''** | mémorisation d'une ERb | | ||
- | |**''<nowiki>\1, \2, ...</nowiki>''** | Rappel de mémorisation | | ||
</note> | </note> | ||
Ligne 837: | Ligne 758: | ||
>Demander le code de retour est inutile, la ER est forcément juste, s'il y a affichage de la sous-chaîne correspondante. À moins d'en avoir besoin lors d'une utilisation de expr dans un script shell s'en servant pour un test. | >Demander le code de retour est inutile, la ER est forcément juste, s'il y a affichage de la sous-chaîne correspondante. À moins d'en avoir besoin lors d'une utilisation de expr dans un script shell s'en servant pour un test. | ||
- | |||
- | * sous-chaîne et quantificateur accolades : | ||
- | |||
- | <code user>var=123.456.</code> | ||
- | <code user>expr "$var" : '\([0-9]\{3\}.\)\{2\}'</code> | ||
- | <code> | ||
- | 456. | ||
- | </code> | ||
- | |||
- | > expr affiche la sous-chaîne "456." | ||
- | |||
- | |||
- | *Le caractère **''*''** est gourmand : | ||
- | <code user>var="hypathie|00 rue Debian-facile|01011|ici"</code> | ||
- | <code user>expr "$var" : '\(.*\)|'</code> | ||
- | <code> | ||
- | hypathie|00 rue Debian-facile|01011 | ||
- | </code> | ||
- | |||
+ | ====L'éditeur de texte vi n'utilise aussi que les ERb ==== | ||
- | ====L'éditeur de texte vi n'utilise que les ERb ==== | ||
===Préparation === | ===Préparation === | ||
<code user>cat liste4-vim</code> | <code user>cat liste4-vim</code> | ||
Ligne 894: | Ligne 796: | ||
* sortir du mode insertion : touche "Échap" | * sortir du mode insertion : touche "Échap" | ||
* enregistrer et sortir : '' :wq '' et touche <entrée> | * enregistrer et sortir : '' :wq '' et touche <entrée> | ||
- | |||
- | * vi (vim) utilise tous [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#caracteres-communs-aux-erb-et-ere|les caractères communs aux ERb et ERe]], tous [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#caracteres-specifiques-aux-erb|les caractères spécifiques aux ERb]], y compris ceux ci-dessous (comme "les commandes à option" permettant de choisir le type //ER//): | ||
- | |||
- | |**''<nowiki>\?</nowiki>''** | zéro ou une fois l'élément précédent | | ||
- | |**''<nowiki>\+</nowiki>''** | une ou plusieurs fois l'élément précédent | | ||
- | |**''<nowiki>\|</nowiki>''** | alternative | | ||
- | |||
* Pour apprendre les rudiments de l'utilisation de vim (et donc de vi), après l'installation de vim : | * Pour apprendre les rudiments de l'utilisation de vim (et donc de vi), après l'installation de vim : | ||
Ligne 946: | Ligne 841: | ||
*i - drapeau - ignorer la casse (prend en compte toutes les occurrences de la chaîne en majuscules ou en minuscules) | *i - drapeau - ignorer la casse (prend en compte toutes les occurrences de la chaîne en majuscules ou en minuscules) | ||
</note> | </note> | ||
- | |||
- | |||
- | |||
===Exemples de recherches === | ===Exemples de recherches === | ||
Ligne 966: | Ligne 858: | ||
On valide avec entrée, et ''nohlsearch'' pour effacer | On valide avec entrée, et ''nohlsearch'' pour effacer | ||
- | * sous-chaîne avec parenthèses et accolades : | + | |
- | <code> | + | |
- | \([0-9]\{3\}.\)\{2\} | + | |
- | </code> | + | |
- | Vi ou vim surligne à la ligne 9 (comportant "123.3456.abc") la sous-chaîne **''123.3456.''**. | + | |
===Exemples de substitution=== | ===Exemples de substitution=== | ||
Ligne 989: | Ligne 877: | ||
>"1,$" est l'adressage qui signifie de la première ligne à la fin. | >"1,$" est l'adressage qui signifie de la première ligne à la fin. | ||
- | * utilisation de \| : | + | * sous-chaîne avec parenthèses et accolades : |
+ | <code> | ||
+ | /\([0-9]\{3\}.\)\{2\} | ||
+ | </code> | ||
+ | Vi ou vim surligne à la ligne 9 (comportant "123.3456.abc") la sous-chaîne **''123.3456.''**. | ||
+ | |||
+ | |||
+ | |||
+ | =====Caractères spécifiques aux ERb et ERe ===== | ||
+ | |||
+ | <note tip> | ||
+ | Je présenterai ici les commandes qui utilisent uniquement les ERb, c'est-à-dire, celles qui n'ont pas besoin d'une option pour utiliser les expressions rationnelles et qui n'utilisent que les expressions rationnelles basiques, et donc forcément les caractères spécifiques aux ERb.\\ | ||
+ | Il s'agit de **''expr''** et **''vi''**.\\ | ||
+ | |||
+ | Elles utilisent bien sûr tous [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#caracteres-communs-aux-erb-et-ere|les caractères communs aux ERb et ERe]], leur utilisation avec ces caractères apparaîtra en à côté de l'utilisation des caractères spécifiques aux ERb qui permettent de décrire des motifs plus complexes. | ||
+ | |||
+ | Pour les commandes "à option" qui utilisent tous les caractères spécifiques aux ERb, mais qui peuvent aussi utiliser ces mêmes caractères((parenthèses, accolades, +, ? et |)) sans antislash avec les ERe, je présenterai rapidement leur utilisation des ERb dans le chapitre sur les caractères spécifiques aux ERe. | ||
+ | </note> | ||
+ | |||
+ | ====Caractères spécifiques aux ERb ==== | ||
+ | |||
+ | Toutes les commandes utilisant les expressions rationnelles basiques utilisent les caractères énumérés ci-dessous.\\ | ||
+ | |||
+ | La commande **''expr''** n'utilise que ceux-ci.\\ | ||
+ | |||
+ | ^expressions ^Modèles reconnus ^ | ||
+ | |**''<nowiki>\{m\}</nowiki>''** | m fois le caractère précédent | | ||
+ | |**''<nowiki>\{m,\} </nowiki>''** | au moins m fois le caractère précédent | | ||
+ | |**''<nowiki>\{m,n\} </nowiki>''** | entre m et n fois le caractère précédent | | ||
+ | |**''<nowiki>\(ERb\)</nowiki>''** | mémorisation d'une ERb | | ||
+ | |**''<nowiki>\1, \2, ...</nowiki>''** | Rappel de mémorisation | | ||
+ | |||
+ | Les commandes **''grep''** (ou **''grep -G''**) ; **''find -regextype "posix-basic" ''** ; | ||
+ | **''locate --regexp''** ; **''sed''**; **''vi''** utilisent en plus ces caractères ci-dessous : | ||
+ | |||
+ | ^ ^ ^ | ||
+ | |**''<nowiki>\?</nowiki>''** | zéro ou une fois l'élément précédent | | ||
+ | |**''<nowiki>\+</nowiki>''** | une ou plusieurs fois l'élément précédent | | ||
+ | |**''<nowiki>\|</nowiki>''** | alternative | | ||
+ | |||
+ | -> Le caractère **''\''** donne une signification spéciale aux parenthèses et accolades, ?, +, | au lieu de les rendre littérales.\\ | ||
+ | Mais il permet de rendre littéraux les autres caractères des ERb, par exemple ''\.'' permet de sélectionner un point. | ||
+ | |||
+ | |||
+ | ====Caractères spécifiques aux ERe ==== | ||
+ | |||
+ | Les caractères spécifiques aux ERe sont utilisables avec les commandes : | ||
+ | |||
+ | **''grep -E''** ; (ou **''egrep''**) ; **''find -regextype "posix-extended" ''** ; | ||
+ | **''locate --regex''** ; **''sed -r''** et **''awk''**((alias gawk)).\\ | ||
+ | |||
+ | Bien évidemment tous [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#caracteres-communs-aux-erb-et-ere|les caractères communs aux ERb et ERe]] sont utilisables avec ces commandes et ces options. | ||
+ | |||
+ | ^expressions ^ Modèles reconnus ^ | ||
+ | |**''?''** | zéro ou une fois le caractère ou le regroupement précédent | | ||
+ | |**''+''** |une à n fois le caractère ou regroupement précédent | | ||
+ | |**''<nowiki>{m}</nowiki>''** |m fois le caractère précédent | | ||
+ | |**''<nowiki>{m,}</nowiki>''** | m fois le caractère précédent | | ||
+ | |**''<nowiki>{m,n}</nowiki>''** | entre m et n fois le caractère précédent | | ||
+ | |**''<nowiki>( er1)</nowiki>''** | regroupement | | ||
+ | |**''<nowiki>er1|er2|er3</nowiki>''** | alternative | | ||
+ | |**''<nowiki>(er)+</nowiki>''**|Une ou plus de une chaîne(s) consécutive(s) validée(s) "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>[c1c2...]</nowiki>''**|Tout caractère expressément listé 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>er1|er2</nowiki>''**|Toute chaîne de caractères validée soit par er1 soit par er2.| | ||
+ | |**''<nowiki>(er)(er)</nowiki>''**|Toute chaîne validée par l’expression er, chaîne vide exclue.| | ||
+ | |**''<nowiki>(er1)(er2)</nowiki>''**|Toute chaîne de caractères de type AB, dans laquelle l’expression régulière er1 valide A et l’expression régulière er2 valide B.\\ Avec awk uniquement| | ||
+ | |||
+ | =====Les commandes expr et vi et les caractères spécifiques aux ERb ===== | ||
+ | |||
+ | ====La commande expr n'utilise que ERb==== | ||
+ | __ | ||
+ | **Rappel :**__\\ | ||
+ | |||
+ | * Soit le fichier "<nowiki>liste4-spec</nowiki>" : | ||
+ | |||
+ | <code user>cat liste4-spec</code> | ||
+ | <code> | ||
+ | gdd:a:aa:aaa:aaaa:aaaaaa:aaaaaaaa | ||
+ | T5c Kc5 T5 c E2* abcd 7 9Abcd | ||
+ | 7 1AAA.AAA.bcdef aBcd6a 123* | ||
+ | abc2356.99 | ||
+ | 73000|Savoie | ||
+ | 123456 | ||
+ | 1234567 | ||
+ | index-tel|04|Rhône-Alpe | ||
+ | -15 +36 5687 {15} exemple{36} | ||
+ | il y a un truc et un truc et encore un truc et une chose | ||
+ | choses et trucs ne font pas bon ménage | ||
+ | 123.3456.abc | ||
+ | trucschosetruc | ||
+ | tructructrucs | ||
+ | chosechosechose | ||
+ | </code> | ||
+ | |||
+ | * Syntaxe : | ||
+ | |||
+ | expr chaîne-de-caractères : expression-rationnelle-basique | ||
+ | |||
+ | <note tip> | ||
+ | |||
+ | * **''expr''** utilise tous les [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#caracteres-communs-aux-erb-et-ere|caractères communs aux ERb et ERe]] | ||
+ | * mais elle n'utilise que les caractères spécifiques aux ERb ci-dessous : | ||
+ | |||
+ | |**''<nowiki>\{m\}</nowiki>''** | m fois le caractère précédent | | ||
+ | |**''<nowiki>\{m,\} </nowiki>''** | au moins m fois le caractère précédent | | ||
+ | |**''<nowiki>\{m,n\} </nowiki>''** | entre m et n fois le caractère précédent | | ||
+ | |**''<nowiki>\(ERb\)</nowiki>''** | mémorisation d'une ERb | | ||
+ | |**''<nowiki>\1, \2, ...</nowiki>''** | Rappel de mémorisation | | ||
+ | |||
+ | </note> | ||
+ | |||
+ | ===Exemple === | ||
+ | |||
+ | * sous-chaîne et quantificateur accolades : | ||
+ | |||
+ | <code user>var=123.456.</code> | ||
+ | <code user>expr "$var" : '\([0-9]\{3\}.\)\{2\}'</code> | ||
+ | <code> | ||
+ | 456. | ||
+ | </code> | ||
+ | |||
+ | > expr affiche la sous-chaîne "456." | ||
+ | |||
+ | |||
+ | *Le caractère **''*''** est gourmand : | ||
+ | <code user>var="hypathie|00 rue Debian-facile|01011|ici"</code> | ||
+ | <code user>expr "$var" : '\(.*\)|'</code> | ||
+ | <code> | ||
+ | hypathie|00 rue Debian-facile|01011 | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ====L'éditeur de texte vi et les caractères spécifiques aux ERb==== | ||
+ | |||
+ | <note tip> | ||
+ | **'' vi''** (vim) utilise tous [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#caracteres-communs-aux-erb-et-ere|les caractères communs aux ERb et ERe]], tous [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#caracteres-specifiques-aux-erb|les caractères spécifiques aux ERb]], y compris ceux ci-dessous (comme "les commandes à option" permettant de choisir le type //ER//): | ||
+ | |||
+ | |**''<nowiki>\?</nowiki>''** | zéro ou une fois l'élément précédent | | ||
+ | |**''<nowiki>\+</nowiki>''** | une ou plusieurs fois l'élément précédent | | ||
+ | |**''<nowiki>\|</nowiki>''** | alternative | | ||
+ | |||
+ | </note> | ||
+ | |||
+ | * Reprise du fichier "liste4-vim" : | ||
+ | <code user>vi liste4-vim</code> | ||
+ | ou | ||
+ | <code user>vim liste4-vim</code> | ||
+ | |||
+ | {{http://pix.toile-libre.org/upload/original/1407922486.png?400}} | ||
+ | |||
+ | |||
+ | ===utilisation de \| === | ||
<code>/c\|t</code> | <code>/c\|t</code> | ||
Ligne 995: | Ligne 1038: | ||
{{http://pix.toile-libre.org/upload/original/1407937898.png?400}} | {{http://pix.toile-libre.org/upload/original/1407937898.png?400}} | ||
- | * Utilisation de \? : | + | ===Utilisation de \? === |
<code>/\.[0-9]\?</code> | <code>/\.[0-9]\?</code> | ||
Ligne 1001: | Ligne 1044: | ||
{{http://pix.toile-libre.org/upload/original/1407857157.png?400}} | {{http://pix.toile-libre.org/upload/original/1407857157.png?400}} | ||
- | * Utilisation de \+ : | + | ===Utilisation de \+ === |
<code>/[A-Z]\+</code> | <code>/[A-Z]\+</code> | ||
-> Là aussi :\\ | -> Là aussi :\\ |