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 Les deux révisions suivantes | ||
utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes [13/08/2014 16:32] Hypathie [Caractères spécifiques aux ERb] |
utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes [13/08/2014 17:31] Hypathie [grep, sed, find, locate et les caractères spécifiques aux ERb] |
||
---|---|---|---|
Ligne 1019: | Ligne 1019: | ||
</note> | </note> | ||
- | ===== grep, sed, find, locate et les caractères spécifiques aux ERb ===== | + | ===== grep, sed, find, locate, awk et les caractères spécifiques aux ERe ===== |
- | 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]]. | + | ===Préparation=== |
- | * Rappel du fichier "<nowiki>liste4-spec</nowiki>": | + | * Soit le fichier "<nowiki>liste4-spec</nowiki>": |
<code> | <code> | ||
gdd:a:aa:aaa:aaaa:aaaaaa:aaaaaaaa | gdd:a:aa:aaa:aaaa:aaaaaa:aaaaaaaa | ||
Ligne 1042: | Ligne 1042: | ||
</code> | </code> | ||
- | ==== grep ou grep -G et les caractères spécifiques aux ERb==== | + | ==== grep -E (egrep) et les caractères spécifiques aux ERe==== |
+ | Avec l'option -E grep utilisent les expressions rationnelles étendues.\\ | ||
+ | La commande egrep et un équivalent. | ||
- | * les accolades avec antislash (le caractère précédent un nombre exact de fois) : | + | <note tip> |
+ | Pour les caractères : **'' <nowiki>[</nowiki> <nowiki>]</nowiki> <nowiki>{</nowiki> <nowiki>}</nowiki> ? + |''**\\ | ||
+ | |||
+ | il possible avec grep d'utiliser aussi les caractères spécifiques aux ERb.\\ | ||
+ | Par exemple :\\ | ||
<code user>grep "1A\{3\}\.A\{3\}\..*" liste4-spec</code> | <code user>grep "1A\{3\}\.A\{3\}\..*" liste4-spec</code> | ||
+ | ou | ||
+ | |||
+ | <code user>grep -G "1A\{3\}\.A\{3\}\..*" liste4-spec</code> | ||
+ | |||
<code> | <code> | ||
7 1AAA.AAA.bcdef aBcd6a 123* | 7 1AAA.AAA.bcdef aBcd6a 123* | ||
</code> | </code> | ||
- | * mais on peut utiliser le caractère \+ : | + | -> mais ne pas oublier l'antislash devant les accolades !\\ |
- | <code user>grep "\(1A\{3\}\.\)\+.*" liste4-spec</code> | + | </note> |
+ | |||
+ | ===Parenthèses === | ||
+ | |||
+ | <code user>grep -E "( [0-9]{4})" liste4-spec</code> | ||
<code> | <code> | ||
- | 7 1AAA.AAA.bcdef aBcd6a 123* | + | -15 +36 5687 {15} exemple{36} |
</code> | </code> | ||
- | + | ===le caractère précédent de "n" à "m" fois :=== | |
- | * le caractère précédent de "n" à "m" fois : | + | <code user>grep -E "[0-9]{1,3}" liste4-spec</code> |
- | <code user>grep "[0-9]\{1,3\}" liste4-spec</code> | + | |
<code> | <code> | ||
T5c Kc5 T5 c E2* abcd 7 9Abcd | T5c Kc5 T5 c E2* abcd 7 9Abcd | ||
Ligne 1064: | Ligne 1077: | ||
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} | ||
Ligne 1069: | Ligne 1084: | ||
</code> | </code> | ||
- | * le caractère précédent au moins "n" fois : | + | ===Les accolades (le caractère précédent un nombre exact de fois) : === |
- | <code user>grep "[0-9]\{4,\}" liste4-spec</code> | + | <code user>grep -E "1A{3}\.A{3}\..*" liste4-spec</code> |
+ | <code> | ||
+ | 7 1AAA.AAA.bcdef aBcd6a 123* | ||
+ | </code> | ||
+ | |||
+ | ===Le caractère précédent au moins "n" fois :=== | ||
+ | <code user>grep -E "[0-9]{4,}" liste4-spec</code> | ||
<code> | <code> | ||
abc2356.99 | abc2356.99 | ||
Ligne 1078: | Ligne 1099: | ||
</code> | </code> | ||
- | * parenthèses avec antislash et mémorisation : | + | ===Le caractère + et parenthèses === |
- | <code user>grep "\( [0-9]\{4\}\)" liste4-spec</code> | + | <code user>grep -E "(1A{3}\.)+.*" liste4-spec</code> |
<code> | <code> | ||
- | -15 +36 5687 {15} exemple{36} | + | 7 1AAA.AAA.bcdef aBcd6a 123* |
</code> | </code> | ||
- | * Le caractère \? : | + | ===Le caractère ? === |
- | <code user>grep "trucs\?" liste4-spec</code> | + | <code user>grep -E "trucs?" liste4-spec</code> |
<code> | <code> | ||
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 | ||
Ligne 1096: | Ligne 1117: | ||
>On cherche les lignes qui comporte "truc" au singulier ou au pluriel. | >On cherche les lignes qui comporte "truc" au singulier ou au pluriel. | ||
- | ====sed et les caractères spécifiques aux ERb ==== | + | ===Le caractère d'alternative | === |
+ | <code user>grep -E "(truc|chose)" liste4-spec</code> | ||
+ | <code> | ||
+ | il y a un truc et un truc et encore un truc et une chose | ||
+ | choses et trucs ne font pas bon ménage | ||
+ | trucschosetruc | ||
+ | tructructrucs | ||
+ | chosechosechose | ||
+ | </code> | ||
+ | |||
+ | ====sed et les caractères spécifiques aux ERe ==== | ||
__**Rappel**__\\ | __**Rappel**__\\ | ||
Par défaut sed utilise les ERb.\\ | Par défaut sed utilise les ERb.\\ | ||
- | La syntaxe est la même que pour les caractères communs aux ERe. | + | Pour s'éviter de mettre un antislash devant parenthèse, accolade, ?, +, |,\\ il faut utiliser **l'option -r**.\\ |
+ | |||
+ | Sans option et avec l'antislash le signification de ces caractères sont les mêmes que lors de leur utilisation avec l'option -r. | ||
===Exemples === | ===Exemples === | ||
Ligne 1106: | Ligne 1139: | ||
* Substituer "Hello" par "OK" : | * Substituer "Hello" par "OK" : | ||
- | <code user>echo "coucou Hello Yep" | sed 's/[A-Z]\{1\}[a-z]\{4\}/OK/g'</code> | + | <code user>echo "coucou Hello Yep" | sed -r 's/[A-Z]{1}[a-z]{4}/OK/g'</code> |
<code> | <code> | ||
coucou OK Yep | coucou OK Yep | ||
Ligne 1113: | Ligne 1146: | ||
* Substituer "a" et "aa" par "OK" : | * Substituer "a" et "aa" par "OK" : | ||
- | <code user>echo "a aa aaa aaaa aaaaaa aaaaaaaa" | sed -e 's/\(a\{1\} \)/OK/'\ | + | <code user>echo "a aa aaa aaaa aaaaaa aaaaaaaa" | sed -re 's/(a{1} )/OK/'\ |
- | -e 's/\(a\{2\} \)/OK/'</code> | + | -e 's/(a{2} )/OK/'</code> |
<code> | <code> | ||
OKOKaaa aaaa aaaaaa aaaaaaaa | OKOKaaa aaaa aaaaaa aaaaaaaa | ||
Ligne 1120: | Ligne 1153: | ||
<note tip> | <note tip> | ||
- | La lisibilité devient vite difficile pour sélectionner des sous-chaîne avec les ERb.\\ | + | L'antislash de la commande précédente permet de couper les longues commandes.\\ |
- | Mieux vaut donc passer aux ERe, quand les commandes peuvent les utiliser.\\ | + | Ne pas confondre avec l'antislash utiliser pour les ERb et les caractères spécifiques, parenthèses, accolades, etc. |
- | C'est justement le cas de la commande sed, locate et find. Je ne m'y attarderai donc pas. | + | |
</note> | </note> | ||
- | ====find et les caractères spécifiques aux ERb " ==== | + | ====find et les caractères spécifiques aux ERe " ==== |
__**Rappel **__\\ | __**Rappel **__\\ | ||
- | Pour utiliser les ERb, il faut utiliser l'option **''-regextype "posix-basic" ''**. | + | Pour utiliser les ERe, il faut utiliser l'option **''-regextype "posix-extended" ''**.\\ |
+ | |||
+ | Pour les caractères **'' <nowiki>[</nowiki> <nowiki>]</nowiki> <nowiki>{</nowiki> <nowiki>}</nowiki> ? + ''**, on peut là aussi choisir les ERb en mettant un antislash devant.\\ | ||
+ | Pour ce faire, il faut alors utiliser l'option **''-regextype "posix-basic" ''**. | ||
__**Préparation**__\\ | __**Préparation**__\\ | ||
Ligne 1151: | Ligne 1186: | ||
</code> | </code> | ||
- | * caractère \? : | + | ou |
+ | |||
+ | <code user>find -regextype "posix-extended" -regex ".*[a-z]{,3}-.*\.jpg$"</code> | ||
+ | <code> | ||
+ | ./img-perso-2.jpg | ||
+ | ./img-perso-1.jpg | ||
+ | </code> | ||
+ | |||
+ | * caractère ? : | ||
<code user>find -regextype "posix-basic" -regex ".*/liste.\?"</code> | <code user>find -regextype "posix-basic" -regex ".*/liste.\?"</code> | ||
<code> | <code> | ||
Ligne 1159: | Ligne 1202: | ||
</code> | </code> | ||
- | * le caractère \+ (depuis le répertoire parent "ERetCMD/" des fichiers) : | + | * le caractère + (depuis le répertoire parent "ERetCMD/" des fichiers) : |
- | <code user>find -regextype "posix-basic" -regex ".*/liste.\+"</code> | + | <code user>find -regextype "posix-extended" -regex ".*liste.+"</code> |
<code> | <code> | ||
./liste2-nom | ./liste2-nom | ||
Ligne 1172: | Ligne 1215: | ||
</code> | </code> | ||
- | ====locate et les caractères spécifiques aux ERb ==== | + | ====locate et les caractères spécifiques aux ERe ==== |
__**Rappel**__\\ | __**Rappel**__\\ | ||
- | Pour utiliser les ERb, il faut utiliser l'option **''--regexp''**.\\ | + | Pour utiliser les ERe, il faut utiliser l'option **''--regex''**.\\ |
+ | De même que précédemment, on peut choisir l'option **''--regexp''** pour utiliser les caractères spécifiques aux ERb qui nécessitent **''\''**. | ||
Soit encore le répertoire "ERetCMD/" contenant les mêmes fichiers (voir find).\\ | Soit encore le répertoire "ERetCMD/" contenant les mêmes fichiers (voir find).\\ | ||
Ligne 1195: | Ligne 1239: | ||
</code> | </code> | ||
- | * caractère \? : | + | ou |
- | <code user>locate --regexp '/liste.\?'</code> | + | |
+ | <code user>locate --regex '([a-z]{1,} ){2}.*\.jpg$'</code> | ||
+ | <code> | ||
+ | /home/Téléchargements/Les utilitaires awk, nawk et gawk - Tutoriel_fichiers/logo.jpg | ||
+ | /home/hypathie/ERetCMD/image linux - 01.jpg | ||
+ | /home/hypathie/ERetCMD/image linux - 02.jpg | ||
+ | /home/hypathie/ERetCMD/image linux - 03.jpg | ||
+ | </code> | ||
+ | |||
+ | * caractère ? : | ||
+ | <code user>locate --regex '/liste.?'</code> | ||
<code> | <code> | ||
/home/hypathie/Documents/PYTHON/python2/chap06/liste_et_branch.py | /home/hypathie/Documents/PYTHON/python2/chap06/liste_et_branch.py | ||
Ligne 1214: | Ligne 1268: | ||
>Le fichier "liste" (sans extension) apparaît. | >Le fichier "liste" (sans extension) apparaît. | ||
- | * caractère \+ : | + | * caractère + : |
- | <code user>locate --regexp '/liste.\+'</code> | + | <code user>locate --regex '/liste.+'</code> |
<code> | <code> | ||
/home/hypathie/Documents/PYTHON/python2/chap06/liste_et_branch.py | /home/hypathie/Documents/PYTHON/python2/chap06/liste_et_branch.py |