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 06:51] Hypathie [Les expressions rationnelles basiques selon les commandes] |
utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes [13/08/2014 09:28] Hypathie [Les expressions rationnelles basiques selon les commandes] |
||
---|---|---|---|
Ligne 221: | Ligne 221: | ||
</code> | </code> | ||
+ | Voir l'utilisation de grep (grep -G) avec [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#grep-ou-grep-g-et-l-utilisation-des-erb|les caractères spécifiques aux ERb]]. | ||
</note> | </note> | ||
Ligne 342: | Ligne 343: | ||
<code man find> | <code man find> | ||
-regextype type | -regextype type | ||
- | Définir la syntaxe des expressions rationnelles des tests -regex | + | Définir la syntaxe des expressions rationnelles des tests -regex |
- | et -iregex qui seront indiqués plus loin sur la ligne de com‐ | + | et -iregex qui seront indiqués plus loin sur la ligne de com‐ |
- | mande. Les types actuellement implémentés sont emacs (type par | + | mande. Les types actuellement implémentés sont emacs (type par |
- | défaut), posix-awk, posix-basic, posix-egrep et posix-extended. | + | défaut), posix-awk, posix-basic, posix-egrep et posix-extended. |
</code> | </code> | ||
- | ===Syntaxe === | + | <note tip> |
+ | Avec find il faut toujours une option pour utiliser une //ER//.\\ | ||
+ | * Pour une expression rationnelle basique :\\ | ||
<code> | <code> | ||
- | find -regextype "posix-basic" -regex "ERb" | + | find -regextype "posix-basic" -regex "son-expression-rationnelle-basique" |
</code> | </code> | ||
- | <note tip> | + | * Pour une expression rationnelle étendue :\\ |
- | L'option -regextype posix-basic permet de définir le type de ER qu'on souhaite utiliser.\\ | + | <code> |
+ | find -regextype "posix-extended" -regex "son-expression-rationnelle-étendue" | ||
+ | </code> | ||
+ | |||
+ | * Il faut aussi prévenir find, qu'on va utiliser une ER avec :((de même qu'on prévient qu'on cherche un motif en respectant la casse avec ''-name'')) | ||
+ | * **''-regex ER''** | ||
+ | * **''-iregex motif''** : Semblable à -regex, pour ne pas tenir compte de la casse (ne pas différencier les majuscules et les minuscules). | ||
+ | |||
+ | * Il s'agit d'une correspondance sur __le chemin complet__.\\ Pour représenter un chemin absolu quelque soit-il, il faut ajouter en début d'expression **''.*''**. | ||
- | Il faut aussi prévenir find, qu'on va utiliser une ER, de même qu'on prévient qu'on cherche un motif en respectant la casse avec ''-name'' avec **''-regex ER''**.\\ | + | Je ne donnerai ici quelques exemples d'utilisation des caractères communs aux ERb et ERe, en tant que caractères ERb, afin d'illustrer l'utilisation de find avec l'option ''-regextype "posix-basic''.\\ |
- | Il s'agit d'une correspondance sur __le chemin complet__.\\ Par exemple, pour mettre en correspondance un fichier\\ nommé « ./fubar3 », il faut utiliser les expressions rationnelles « .*bar. » ou « .*b.*3 », mais pas « f.*r3 ».\\ | + | Pour l'utilisation des caractères spécifiques aux ERb avec find, voir : [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#find-et-les-caracteres-specifiques-aux-erb|find et les caractères spécifiques aux ERb]]\\ |
- | * ''-iregex motif'' : Semblable à -regex, pour ne pas tenir compte de la casse (ne pas différencier les majuscules et les minuscules). | + | Pour l'illustration de find avec les ERe voir : |
</note> | </note> | ||
- | Je ne donnerai que quelques exemples, puisque tous les caractères de ERb sont utilisables. \\ Je m'attacherai surtout à la syntaxe et au contexte d'utilisation des //ER// relatifs à find. | ||
* Soit le __répertoire parent__ des fichiers listés ci-dessous : | * Soit le __répertoire parent__ des fichiers listés ci-dessous : | ||
Ligne 385: | Ligne 395: | ||
>Le premier groupe de ''.*'' décrit le chemin du ou des fichiers dont le nom correspond à une chaîne commençant par "li", suivi de plusieurs caractères (deuxième groupe ''.*''), puis d'un "m". | >Le premier groupe de ''.*'' décrit le chemin du ou des fichiers dont le nom correspond à une chaîne commençant par "li", suivi de plusieurs caractères (deuxième groupe ''.*''), puis d'un "m". | ||
- | >Attention la même commande lancée depuis le répertoire personnel de l'utilisateur par exemple et non depuis le répertoire parent des fichiers : | + | >La même commande lancée depuis un répertoire plus en amont dans la hiérarchie, par exemple, depuis le répertoire personnel de l'utilisateur,et non depuis le répertoire parent des fichiers : |
<code>find -regextype "posix-basic" -regex ".*/li.*m"</code> | <code>find -regextype "posix-basic" -regex ".*/li.*m"</code> | ||
Ligne 410: | Ligne 420: | ||
====La commande locate et les caractères communs aux ERb et ERe==== | ====La commande locate et les caractères communs aux ERb et ERe==== | ||
+ | |||
<note tip> | <note tip> | ||
- | Pour utiliser les ERb, il faut utiliser l'option : | + | Pour utiliser les //ER// avec locate, il faut dans tous les cas une option.\\ |
+ | Les caractères communs aux ERb et ERe, peuvent être utilisés avec l'une ou l'autre de ces options : | ||
- | <code>--regexp</code> | + | * __Pour utiliser les ERb, il faut utiliser l'option__ : |
- | Sinon, locate reconnaît le caractère ''*'' comme un métacaractère du shell.\\ | + | <code man locate> |
+ | --regexp REGEXP | ||
+ | Search for a basic regexp REGEXP. No PATTERNs are allowed if | ||
+ | this option is used, but this option can be specified multiple | ||
+ | times. | ||
+ | </code> | ||
- | Contrairement à find, il n'est pas nécessaire que la ER corresponde au chemin absolu d'un fichier.\\ | + | * __Pour utiliser ces mêmes caractères en tant que ERe il faut utiliser l'option__ : |
- | Mais la quantité de réponses peut être très élevée, si on a une idée du répertoire dans lequel se trouve le fichier recherché, il peut plus confortable de le préciser.\\ | + | <code man locate> |
+ | --regex | ||
+ | Interpret all PATTERNs as extended regexps | ||
+ | </code> | ||
+ | |||
+ | Sans l'une ou l'autre de ces options, locate reconnaît le caractère ''*'' comme un métacaractère du shell.\\ | ||
+ | |||
+ | => Cela a une conséquence par rapport aux caractères ERb qui ne sont pas communs aux ERe.\\ | ||
+ | Autrement dit, si on choisit d'utiliser les ERb, il faudra un antislash pour utiliser [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#caracteres-specifiques-aux-erb|les caractères spécifiques aux ERb]] et ce sera inutile si on choisit les ERe. | ||
+ | |||
+ | Voir l'utilisation de [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes?&#locate-et-les-caracteres-specifiques-aux-erb|locate avec les caractères spécifiques aux ERb]]. | ||
+ | |||
+ | |||
+ | *Contrairement à find, __il n'est pas nécessaire que la ER corresponde au chemin absolu d'un fichier__.\\ | ||
+ | Mais la quantité de réponses peut être très élevée, et si l'on a une idée du répertoire dans lequel se trouve le fichier recherché, il peut plus confortable de le préciser.\\ | ||
On peut aussi filtrer le retour avec grep.\\ | On peut aussi filtrer le retour avec grep.\\ | ||
- | Néanmoins, l'utilisation des ERe règle ce problème. (Voir plus bas) | ||
- | Enfin, avec l'utilisation de locate, on n'aura guère l'occasion d'utiliser les caractères début (^) et fin de ligne ($).\\ | + | * Enfin, avec l'utilisation de locate, le caractère début (^) est inusité.\\ |
- | En effet, avec une commande qui cherche des noms de fichiers en fonction d'une chaîne contenu dans ce nom, on ne peut utiliser que '' '^/' '', c'est-à-dire, le début du chemin absolu, ce qui demande d'allonger inutilement l'expression régulière ! | + | |
+ | En effet, avec une commande qui recherche des noms de fichier, la seule possibilité serait **''^/''**. Or locate permet justement de ne pas avoir à donner le chemin absolu du fichier recherché. L'utiliser ne ferait qu'allonger inutilement l'expression régulière ! | ||
</note> | </note> | ||
* Étoile et point | * Étoile et point | ||
<code user>locate --regexp '/home.*[Tt]o.*'</code> | <code user>locate --regexp '/home.*[Tt]o.*'</code> | ||
- | >Donne un retour de plusieurs pages par exemple en cas d'une grande quantité de photo dans un des répertoires de l'utilisateur. | ||
+ | >Donne un retour de plusieurs pages. | ||
<code user>locate --regexp '/home.*[Tt]o.*' | grep "/Dossier/"</code> | <code user>locate --regexp '/home.*[Tt]o.*' | grep "/Dossier/"</code> | ||
Ligne 438: | Ligne 469: | ||
/home/hypathie/ERetCMD/Dossier/toto | /home/hypathie/ERetCMD/Dossier/toto | ||
/home/hypathie/ERetCMD/Dossier/toto. | /home/hypathie/ERetCMD/Dossier/toto. | ||
+ | </code> | ||
+ | |||
+ | * caractère fin de ligne $ : | ||
+ | <code user>locate --regexp '/home.*/Dossier/[Tt]o.*\.txt$'</code> | ||
+ | <code> | ||
+ | /home/hypathie/ERetCMD/Dossier/Toto.txt | ||
+ | /home/hypathie/ERetCMD/Dossier/Toto1.txt | ||
</code> | </code> | ||
Ligne 689: | Ligne 727: | ||
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 931: | Ligne 971: | ||
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 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. | ||
- | ==== grep ==== | + | * Rappel du fichier "<nowiki>liste4-spec</nowiki>": |
+ | <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> | ||
+ | |||
+ | ==== 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 939: | Ligne 998: | ||
</code> | </code> | ||
- | * le caractère précédent à partir de "n" à "m" fois : | + | * mais on peut utiliser le caractère \+ : |
+ | <code user>grep "\(1A\{3\}\.\)\+.*" liste4-spec</code> | ||
+ | <code> | ||
+ | 7 1AAA.AAA.bcdef aBcd6a 123* | ||
+ | </code> | ||
+ | |||
+ | |||
+ | * le caractère précédent de "n" à "m" fois : | ||
<code user>grep "[0-9]\{1,3\}" liste4-spec</code> | <code user>grep "[0-9]\{1,3\}" liste4-spec</code> | ||
<code> | <code> | ||
Ligne 967: | Ligne 1033: | ||
</code> | </code> | ||
+ | * Le caractère \? : | ||
+ | <code user>grep "trucs\?" 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 | ||
+ | </code> | ||
- | ====sed sans option utilise les ERb ==== | + | >On cherche les lignes qui comporte "truc" au singulier ou au pluriel. |
+ | |||
+ | ====sed et les caractères spécifiques aux ERb ==== | ||
+ | __**Rappel**__\\ | ||
+ | |||
+ | Par défaut sed utilise les ERb.\\ | ||
La syntaxe est la même que pour les caractères communs aux ERe. | La syntaxe est la même que pour les caractères communs aux ERe. | ||
+ | |||
+ | ===Exemples === | ||
* Substituer "Hello" par "OK" : | * Substituer "Hello" par "OK" : | ||
Ligne 992: | Ligne 1073: | ||
</note> | </note> | ||
- | ====locate utilise les ERb avec l'option --regexp ==== | + | ====find et les caractères spécifiques aux ERb " ==== |
- | <code man locate> | + | __**Rappel **__\\ |
- | --regexp REGEXP | + | |
- | Search for a basic regexp REGEXP. No PATTERNs are allowed if | + | Pour utiliser les ERb, il faut utiliser l'option **''-regextype "posix-basic" ''**. |
- | this option is used, but this option can be specified multiple | + | |
- | times. | + | __**Préparation**__\\ |
+ | |||
+ | Dans le répertoire de l'utilisateur et dans le dossier "ERetCMD/" | ||
+ | |||
+ | * Création de deux fichiers, "img-perso-1.jpg" et "img-perso-2.jpg" : | ||
+ | |||
+ | <code user> | ||
+ | touch img-perso-1.jpg img-perso-2.jpg | ||
</code> | </code> | ||
- | ===Syntaxe === | ||
+ | ===Exemples === | ||
+ | |||
+ | <code user>find -regextype "posix-basic" -regex ".*/[a-z]\{,3\}-.*\.jpg$"</code> | ||
<code> | <code> | ||
- | locate --regexp 'ERb' | + | ./img-perso-2.jpg |
+ | ./img-perso-1.jpg | ||
</code> | </code> | ||
+ | |||
+ | ====locate et les caractères spécifiques aux ERb ==== | ||
+ | Rappel\\ | ||
+ | |||
+ | Pour utiliser les ERb, il faut utiliser l'option **''--regexp''**. | ||
=== Préparation=== | === Préparation=== | ||
Ligne 1036: | Ligne 1132: | ||
/home/hypathie/ERetCMD/image linux - 02.jpg | /home/hypathie/ERetCMD/image linux - 02.jpg | ||
/home/hypathie/ERetCMD/image linux - 03.jpg | /home/hypathie/ERetCMD/image linux - 03.jpg | ||
- | </code> | ||
- | |||
- | |||
- | |||
- | ====find utilise les ERb avec l'option -regextype "posix-basic" ==== | ||
- | |||
- | ===Préparation=== | ||
- | Dans le répertoire de l'utilisateur et dans le dossier "ERetCMD/" | ||
- | |||
- | * Création de deux fichiers, "img-perso-1.jpg" et "img-perso-2.jpg" : | ||
- | |||
- | <code user> | ||
- | touch img-perso-1.jpg img-perso-2.jpg | ||
- | </code> | ||
- | |||
- | ===exemples === | ||
- | |||
- | <code user>find -regextype "posix-basic" -regex ".*/[a-z]\{,3\}-.*\.jpg$"</code> | ||
- | <code> | ||
- | ./img-perso-2.jpg | ||
- | ./img-perso-1.jpg | ||
</code> | </code> | ||