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 09:13] Hypathie [grep, sed, find, locate et les caractères spécifiques aux ERb] |
utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes [13/08/2014 11:29] Hypathie [Les expressions rationnelles sous le jour des commandes] |
||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
* Objet : maîtriser les expressions rationnelles basiques et étendues ainsi que les classes POSIX | * Objet : maîtriser les expressions rationnelles basiques et étendues ainsi que les classes POSIX | ||
* Niveau requis : {{avisé}} | * Niveau requis : {{avisé}} | ||
- | * Commentaires : utiliser les expressions rationnelles basiques, étendues, les classes avec grep, grep -E, find, locate, expr, vi (vim), sed et awk. | + | * Commentaires : utiliser les expressions rationnelles basiques, étendues, les classes avec grep, grep -E, find, locate, expr, vi, sed et awk. |
**NOTA**\\ | **NOTA**\\ | ||
Ligne 39: | Ligne 39: | ||
* les classes POSIX (considérer soit comme ERb, soit comme ERe selon les programmes | * les classes POSIX (considérer soit comme ERb, soit comme ERe selon les programmes | ||
- | Les raccourcis (par exemples, retour à la ligne ''\n'', tabulation ''\t'') étant particuliers aux programmes, seront listés en complément mais ne seront pas exemplifiés. | + | Les raccourcis (par exemples, retour à la ligne ''\n'', tabulation ''\t'') étant particuliers aux programmes, seront listés en complément. |
- | ==== Panorama exhaustif des programmes GNU/Linux concernés par les ERE=== | + | ==== Panorama exhaustif des programmes GNU/Linux concernés par les expressions rationnelles=== |
* **expr** : **ERb**\\ pour la correspondance de chaîne de caractères avec une expression régulière. | * **expr** : **ERb**\\ pour la correspondance de chaîne de caractères avec une expression régulière. | ||
Ligne 221: | Ligne 221: | ||
</code> | </code> | ||
+ | Voir ci-dessous pour l'utilisation de grep (grep -G) avec [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#grep-ou-grep-g-et-les-caracteres-specifiques-aux-erb|les caractères spécifiques aux ERb]]. | ||
</note> | </note> | ||
Ligne 687: | Ligne 688: | ||
=====Caractères spécifiques aux ERb ===== | =====Caractères spécifiques aux ERb ===== | ||
- | Les commandes utilisent les caractères spécifiques aux expressions rationnelles basiques:\\ | + | Toutes les commandes utilisant les expressions rationnelles basiques utilisent les caractères énumérés ci-dessous.\\ |
- | grep (ou grep -G) ; find -regextype "posix-basic" ; locate --regexp ; sed (sans option) ; vi (vim) ; expr | + | |
+ | La commande **''expr''** n'utilise que ceux-ci.\\ | ||
^expressions ^Modèles reconnus ^ | ^expressions ^Modèles reconnus ^ | ||
Ligne 697: | Ligne 699: | ||
|**''<nowiki>\1, \2, ...</nowiki>''** | Rappel de mémorisation | | |**''<nowiki>\1, \2, ...</nowiki>''** | Rappel de mémorisation | | ||
- | Les commandes grep, vi (vim), locate, find utilisent aussi les caractères spécifiques suivants : | + | Les commandes **''grep''** (ou **''grep -G''**) ; **''find -regextype "posix-basic" ''** ; |
+ | **''locate --regexp''** ; **''sed''**; **''vi''** (**''vim''**) utilisent en plus ces caractères-ci : | ||
^ ^ ^ | ^ ^ ^ | ||
Ligne 703: | Ligne 706: | ||
|**''<nowiki>\+</nowiki>''** | une ou plusieurs fois l'élément précédent | | |**''<nowiki>\+</nowiki>''** | une ou plusieurs fois l'élément précédent | | ||
|**''<nowiki>\|</nowiki>''** | alternative | | |**''<nowiki>\|</nowiki>''** | alternative | | ||
- | |||
- | |||
-> Le caractère **''\''** donne une signification spéciale aux parenthèses et accolades, ?, +, | au lieu de les rendre littérales.\\ | -> Le caractère **''\''** donne une signification spéciale aux parenthèses et accolades, ?, +, | au lieu de les rendre littérales.\\ | ||
Ligne 710: | Ligne 711: | ||
<note tip> | <note tip> | ||
- | Je présenterai principalement les commandes "spécifiques" aux ERb, c'est-à-dire, celles qui n'ont pas la possibilité d'utiliser les ERE, vi (vim) et expr.\\ | + | Je présenterai principalement les commandes qui n'utilisent que les ERb, c'est-à-dire, celles qui n'ont pas besoin d'une option pour utiliser les expressions rationnelles et qui n'ont pas encore été abordées, **''expr''** et **''vi''** (**''vim''**).\\ |
- | Elles utilisent bien sûr tous les caractères ERb et pas seulement les caractères spécifiques aux ERb. | + | |
- | Je ne ferai ici qu'un bref rappel des autres commandes qui peuvent utiliser (en changeant d'option) les ERe plus lisibles((plus de ''\'' devant parenthèses, accolades, +, ? et |)). | + | 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. |
+ | |||
+ | Je ferai ensuite un bref rappel des 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. | ||
</note> | </note> | ||
Ligne 726: | Ligne 728: | ||
abc2356.99 | abc2356.99 | ||
73000|Savoie | 73000|Savoie | ||
+ | 123456 | ||
+ | 1234567 | ||
index-tel|04|Rhône-Alpe | index-tel|04|Rhône-Alpe | ||
-15 +36 5687 {15} exemple{36} | -15 +36 5687 {15} exemple{36} | ||
il y a un truc et un truc et encore un truc et une chose | il y a un truc et un truc et encore un truc et une chose | ||
- | chose et truc ne font pas bon ménage | + | choses et trucs ne font pas bon ménage |
123.3456.abc | 123.3456.abc | ||
- | trucchosetruc | + | trucschosetruc |
- | tructructruc | + | tructructrucs |
chosechosechose | chosechosechose | ||
</code> | </code> | ||
Ligne 746: | Ligne 750: | ||
* 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 832: | Ligne 845: | ||
<note tip> | <note tip> | ||
- | Modes utilises dans ce qui suit\\ | + | Modes utilisés dans ce qui suit :\\ |
Ligne 849: | Ligne 862: | ||
* enregistrez : '' :wq '' et touche <entrée> | * enregistrez : '' :wq '' et touche <entrée> | ||
- | * En plus des [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#caracteres-specifiques-aux-erb|caractères spécifiques aux ERb]] vi (vim) utilise les caractères spécifiques aux ERb ci-dessous (comme grep): | + | * 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"): |
|**''<nowiki>\?</nowiki>''** | zéro ou une fois l'élément précédent | | |**''<nowiki>\?</nowiki>''** | zéro ou une fois l'élément précédent | | ||
Ligne 966: | Ligne 979: | ||
===== grep, sed, find, locate et les caractères spécifiques aux ERb ===== | ===== grep, sed, find, locate et les caractères spécifiques aux ERb ===== | ||
- | Les commandes grep et sed sans option, les commandes locate --regexp et find -regextype “posix-basic” avec option utilisent les caractères spécifiques aux ERb.\\ Puisqu'il est plus pratique de les utiliser avec les ERe qui sont plus lisibles, je n'en donnerai que quelques exemples ici. | + | Les commandes **''grep''** et **''sed''**, les commandes **''locate --regexp''** et **''find -regextype “posix-basic”''** utilisent tous les caractères spécifiques aux ERb.\\ Voir leur utilisation avec [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#caracteres-des-ere|les expressions rationnelles étendues]]. |
* Rappel du fichier "<nowiki>liste4-spec</nowiki>": | * Rappel du fichier "<nowiki>liste4-spec</nowiki>": | ||
Ligne 987: | Ligne 1000: | ||
</code> | </code> | ||
- | ==== grep ou grep -G et l'utilisation des ERb==== | + | ==== grep ou grep -G et les caractères spécifiques aux ERb==== |
* les accolades avec antislash (le caractère précédent un nombre exact de fois) : | * les accolades avec antislash (le caractère précédent un nombre exact de fois) : | ||
Ligne 1077: | Ligne 1090: | ||
__**Préparation**__\\ | __**Préparation**__\\ | ||
- | Dans le répertoire de l'utilisateur et dans le dossier "ERetCMD/" | + | Dans le répertoire de l'utilisateur soit le répertoire "ERetCMD/" contenant : |
- | * Création de deux fichiers, "img-perso-1.jpg" et "img-perso-2.jpg" : | + | <code> |
- | + | Dossier img-perso-2.jpg liste3-erb-ere sort1.txt | |
- | <code user> | + | essai.grep2~ liste liste4-spec sort2.txt |
- | touch img-perso-1.jpg img-perso-2.jpg | + | image linux - 01.jpg liste1 liste4-vim sort3.txt |
+ | image linux - 02.jpg liste1-nom liste-class vim2.png | ||
+ | image linux - 03.jpg liste2 server-0.xkb vim.png | ||
+ | img-perso-1.jpg liste2-nom smolski-exo-sed.txt xxx-sort.txt | ||
</code> | </code> | ||
===Exemples === | ===Exemples === | ||
+ | * accolades (depuis le répertoire parent "ERetCMD/" des fichiers recherchés : | ||
<code user>find -regextype "posix-basic" -regex ".*/[a-z]\{,3\}-.*\.jpg$"</code> | <code user>find -regextype "posix-basic" -regex ".*/[a-z]\{,3\}-.*\.jpg$"</code> | ||
<code> | <code> | ||
Ligne 1093: | Ligne 1109: | ||
</code> | </code> | ||
- | ====locate et les caractères spécifiques aux ERb ==== | + | * caractère \? : |
- | Rappel\\ | + | <code user>find -regextype "posix-basic" -regex ".*/liste.\?"</code> |
- | + | <code> | |
- | Pour utiliser les ERb, il faut utiliser l'option **''--regexp''**. | + | ./ERetCMD/liste1 |
- | + | ./ERetCMD/liste | |
- | === Préparation=== | + | ./ERetCMD/liste2 |
- | Dans le répertoire de l'utilisateur et dans le dosssier "ERetCMD/" : | + | |
- | + | ||
- | * Création de trois fichiers : "image linux - 01.jpg", "image linux - 02.jpg" et "image linux - 03.jpg" : | + | |
- | + | ||
- | <code user> | + | |
- | touch image\ linux\ -\ 01.jpg image\ linux\ -\ 02.jpg image\ linux\ -\ 03.jpg | + | |
</code> | </code> | ||
- | * Visualisation : | + | * le caractère \+ (depuis le répertoire parent "ERetCMD/" des fichiers) : |
- | <code user>ls</code> | + | <code user>find -regextype "posix-basic" -regex ".*/liste.\+"</code> |
<code> | <code> | ||
- | Dossier img-perso-1.jpg liste3-erb-ere smolski-exo-sed.txt | + | ./liste2-nom |
- | essai.grep2~ img-perso-2.jpg liste4-spec sort1.txt | + | ./liste1-nom |
- | image linux - 01.jpg liste1-nom liste4-spec~ sort2.txt | + | ./liste3-erb-ere |
- | image linux - 02.jpg liste1-nom~ liste4-vim sort3.txt | + | ./liste4-vim |
- | image linux - 03.jpg liste2-nom server-0.xkb xxx-sort.txt | + | ./liste1 |
+ | ./liste4-spec | ||
+ | ./liste2 | ||
+ | ./liste-class | ||
</code> | </code> | ||
- | * Mise à jour de la base de donnée : | + | ====locate et les caractères spécifiques aux ERb ==== |
+ | __**Rappel**__\\ | ||
+ | |||
+ | Pour utiliser les ERb, il faut utiliser l'option **''--regexp''**.\\ | ||
+ | |||
+ | Soit encore le répertoire "ERetCMD/" contenant les mêmes fichiers (voir find).\\ | ||
+ | |||
+ | Mise à jour de la base de donnée, si besoin : | ||
<code root> | <code root> | ||
updatedb | updatedb | ||
</code> | </code> | ||
- | ===Exemple === | + | ===Exemples === |
- | <code user>locate --regexp '.*\([a-z]\{1,\} \)\{2\}.*\.jpg$'</code> | + | * parenthèses et accolades (depuis n'importe où dans l'arborescence du système de fichiers) : |
+ | |||
+ | <code user>locate --regexp '\([a-z]\{1,\} \)\{2\}.*\.jpg$'</code> | ||
<code> | <code> | ||
/home/Téléchargements/Les utilitaires awk, nawk et gawk - Tutoriel_fichiers/logo.jpg | /home/Téléchargements/Les utilitaires awk, nawk et gawk - Tutoriel_fichiers/logo.jpg | ||
Ligne 1130: | Ligne 1152: | ||
/home/hypathie/ERetCMD/image linux - 03.jpg | /home/hypathie/ERetCMD/image linux - 03.jpg | ||
</code> | </code> | ||
+ | |||
+ | * caractère \? : | ||
+ | <code user>locate --regexp '/liste.\?'</code> | ||
+ | <code> | ||
+ | /home/hypathie/Documents/PYTHON/python2/chap06/liste_et_branch.py | ||
+ | /home/hypathie/Documents/PYTHON/python3/chap06/liste_et_branch.py | ||
+ | /home/hypathie/ERetCMD/liste | ||
+ | /home/hypathie/ERetCMD/liste-class | ||
+ | /home/hypathie/ERetCMD/liste1 | ||
+ | /home/hypathie/ERetCMD/liste1-nom | ||
+ | /home/hypathie/ERetCMD/liste2 | ||
+ | /home/hypathie/ERetCMD/liste2-nom | ||
+ | /home/hypathie/ERetCMD/liste3-erb-ere | ||
+ | /home/hypathie/ERetCMD/liste4-spec | ||
+ | /home/hypathie/ERetCMD/liste4-vim | ||
+ | /usr/share/man/man2/listen.2.gz | ||
+ | </code> | ||
+ | |||
+ | >Le fichier "liste" (sans extension) apparaît. | ||
+ | |||
+ | * caractère \+ : | ||
+ | |||
+ | <code user>locate --regexp '/liste.\+'</code> | ||
+ | <code> | ||
+ | /home/hypathie/Documents/PYTHON/python2/chap06/liste_et_branch.py | ||
+ | /home/hypathie/Documents/PYTHON/python3/chap06/liste_et_branch.py | ||
+ | /home/hypathie/ERetCMD/liste-class | ||
+ | /home/hypathie/ERetCMD/liste1 | ||
+ | /home/hypathie/ERetCMD/liste1-nom | ||
+ | /home/hypathie/ERetCMD/liste2 | ||
+ | /home/hypathie/ERetCMD/liste2-nom | ||
+ | /home/hypathie/ERetCMD/liste3-erb-ere | ||
+ | /home/hypathie/ERetCMD/liste4-spec | ||
+ | /home/hypathie/ERetCMD/liste4-vim | ||
+ | /usr/share/man/man2/listen.2.gz | ||
+ | </code> | ||
+ | |||
+ | |||
+ | >Le fichier "liste" (sans extension) n'apparaît pas. | ||
=====Les classes ===== | =====Les classes ===== |