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 [14/08/2014 16:49] Hypathie [Introduction] |
utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes [15/08/2014 09:18] Hypathie [Introduction] |
||
---|---|---|---|
Ligne 64: | Ligne 64: | ||
|**''[ ]''** |un caractère cité dans la liste entre crochets |''echo [Tt][io]t[io]''((echo "Toto Tito toto toti tito loto" | echo [Tt][io]t[io]))\\ **affiche les fichiers**\\ Toto\\ Tito\\ toto\\ toti\\ ...\\ **mais pas**\\ loto\\ ... | | |**''[ ]''** |un caractère cité dans la liste entre crochets |''echo [Tt][io]t[io]''((echo "Toto Tito toto toti tito loto" | echo [Tt][io]t[io]))\\ **affiche les fichiers**\\ Toto\\ Tito\\ toto\\ toti\\ ...\\ **mais pas**\\ loto\\ ... | | ||
|**''[ - ]''**\\ [a-z]\\ [A-Z]\\ [A-Z]\\ [0-9] |groupe de caractères |''head t[a-z]to''\\ **affiche**\\ titi\\ tito\\ toto\\ ...\\ **mais pas**\\ tOto\\ t5to\\ | | |**''[ - ]''**\\ [a-z]\\ [A-Z]\\ [A-Z]\\ [0-9] |groupe de caractères |''head t[a-z]to''\\ **affiche**\\ titi\\ tito\\ toto\\ ...\\ **mais pas**\\ tOto\\ t5to\\ | | ||
+ | |||
+ | ===Préparation=== | ||
+ | |||
+ | * Exécuter cette ligne de commande : | ||
+ | <code user> | ||
+ | mkdir ERetCMD/ && cd ERetCMD/ && mkdir Dossier/ &&\ | ||
+ | cd Dossier/ && touch milou && touch tata &&\ | ||
+ | printf "Toto Titi toto titi tito\ndans\n" > titi &&\ | ||
+ | printf "Toto Titi\ndent\n" > titi2 &&\ | ||
+ | printf "toto aime le chocolat\n" > toto &&\ | ||
+ | printf "Toto titi toto tito\n" > Toto.txt &&\ | ||
+ | printf "un copain malin\nmodifiant cette page\n" > tintin &&\ | ||
+ | printf "documentation\n" > titi1 && printf "." > titi1.txt &&\ | ||
+ | printf "Il manque une option a tito\n" > tito &&\ | ||
+ | printf "il a tout mangé.\n" > Toto1.txt | ||
+ | ls | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | milou tintin titi1 titi2 toto Toto.txt | ||
+ | tata titi titi1.txt tito Toto1.txt | ||
+ | </code> | ||
===Métacaractère ou caractère d'expression rationnelle ?=== | ===Métacaractère ou caractère d'expression rationnelle ?=== | ||
Ligne 119: | Ligne 141: | ||
Il s'agit de **find** et **locate**. | Il s'agit de **find** et **locate**. | ||
- | |||
- | ===Péparation=== | ||
- | * créer le répertoire "~/ERetCMD/" et ~/ERetCMD/Dossier: | ||
- | <code user>mkdir ERetCMD/ && cd ERetCMD/ && mkdir Dossier/</code> | ||
- | |||
- | * Créer les fichiers suivants : | ||
- | <code user>cd Dossier/ && touch milou test titi\ | ||
- | titi1 titi2 tito toto. Toto.txt tata tintin titi.\ | ||
- | titi.txt titi1.txt toto Toto1.txt | ||
- | </code> | ||
- | |||
- | * Pour supprimer le répertoire et tout son contenu : | ||
- | (néanmoins, ils serviront pour l'ensemble du wiki) | ||
- | <code>rm -vfR ERetcmd/</code> | ||
=== find=== | === find=== | ||
Ligne 165: | Ligne 173: | ||
===locate === | ===locate === | ||
- | <note tip> | ||
- | Pour utiliser locate, qui fonctionne à partir de la base de donnée, faire un petit : | ||
- | <code root> # updatedb</code> | ||
- | pour effectuer les mises à jour, avant de lancer la recherche. | ||
- | </note> | ||
- | *Soit le même répertoire "~/ERetCMD/" ; y créer les fichiers suivants : | + | * Préparation : |
+ | |||
+ | Soit le même répertoire "~/ERetCMD/" ; y créer les fichiers suivants : | ||
<code user> | <code user> | ||
touch liste liste1 liste1-nom liste2\ | touch liste liste1 liste1-nom liste2\ | ||
Ligne 191: | Ligne 196: | ||
img-perso-1.jpg liste2 liste-class sort3.txt | img-perso-1.jpg liste2 liste-class sort3.txt | ||
</code> | </code> | ||
+ | |||
+ | <note tip> | ||
+ | Pour utiliser locate, qui fonctionne à partir de la base de donnée, faire un petit : | ||
+ | <code root> # updatedb</code> | ||
+ | pour effectuer les mises à jour, avant de lancer la recherche. | ||
+ | </note> | ||
* Rechercher les fichiers dont le nom est "un ou plusieurs caractères suivi de ".txt" : | * Rechercher les fichiers dont le nom est "un ou plusieurs caractères suivi de ".txt" : | ||
Ligne 202: | Ligne 213: | ||
/home/hypathie/ERetCMD/sort3.txt | /home/hypathie/ERetCMD/sort3.txt | ||
+ | </code> | ||
+ | |||
+ | ===sed=== | ||
+ | |||
+ | * Prépararation : | ||
+ | Se déplacer au niveau du "~/ERetCMD/Dossier" | ||
+ | |||
+ | <code user>sed -r '/(a|e).*/s/a/A/' ti*</code> | ||
+ | |||
+ | > L'expression rationnelle est constituée de l'alternative ''(a|e)'' (la sous-chaîne "a" ou "e"), suivi d'un caractère quelconque zéro ou plusieurs fois. | ||
+ | >Cela sera approfondit dans la partie [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes#caracteres-specifiques-aux-erb-ou-caracteres-specifiques-aux-ere|Caractères spécifiques aux ERb ou caractères spécifiques aux ERe]] | ||
+ | |||
+ | <code> | ||
+ | un copAin malin | ||
+ | documentAtion | ||
+ | modifiAnt cette page | ||
+ | frAise | ||
+ | suivAnte | ||
+ | Toto Titi toto titi tito | ||
+ | dAns | ||
+ | frAise fraise | ||
+ | en | ||
+ | Toto titi toto tito | ||
+ | . | ||
+ | Toto Titi | ||
+ | dent | ||
+ | titi Aime les fraises | ||
+ | Il mAnque une option a tito | ||
+ | </code> | ||
+ | |||
+ | ===awk === | ||
+ | |||
+ | *Préparation : | ||
+ | Dans le dossier "~/ERetCMD/Dossier" créer les fichiers "smolski-awk.txt" et "smolski-sed.txt": | ||
+ | <code user> | ||
+ | touch smolski-sed.txt && cat >> smolski-sed.txt <<EOF | ||
+ | toto et titi aiment les abricots. | ||
+ | toto préfère les Fraises. | ||
+ | titi les cerises. | ||
+ | TOTo et TITI sont des chipoteurs du jardin. | ||
+ | EOF | ||
+ | </code> | ||
+ | |||
+ | <code user>touch smolski-awk.txt && cat >> smolski-awk.txt <<EOF | ||
+ | 1 3 Nom Genre Age | ||
+ | 2 1 --------------------------------------- | ||
+ | 3 3 CAMILLE M 7 | ||
+ | 4 3 CHLOE F 12 | ||
+ | 5 3 CLARA F 11 | ||
+ | 6 3 CLEMENT M 7 | ||
+ | 7 3 EMMA F 6 | ||
+ | 8 3 THEO M 8 | ||
+ | EOF | ||
+ | </code> | ||
+ | |||
+ | * Utilisation d'une ER et de métacaractère avec awk : | ||
+ | <code user>awk '$3 ~ /(e|E)/' smolski-*</code> | ||
+ | |||
+ | >Affiche les lignes dont la troisième colonne comporte un "e" ou un "E" de TOUS les fichiers du répertoire "~/ERetCMD/Dossier" commençant par "smolski-". | ||
+ | >Le caractère ''~'' (tilde) est un opérateur de correspondance relevant de la commande awk. | ||
+ | >Il permet de tester la correspondance entre la variable ''$3'' et l'expression rationnelle encadrée de ''/'' (''/(e|E)/''). Voir [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes#awk-et-les-caracteres-communs-aux-erb-et-ere|awk et les expressions rationnelles]] | ||
+ | |||
+ | <code> | ||
+ | 3 3 CAMILLE M 7 | ||
+ | 4 3 CHLOE F 12 | ||
+ | 6 3 CLEMENT M 7 | ||
+ | 7 3 EMMA F 6 | ||
+ | 8 3 THEO M 8 | ||
+ | toto préfère les Fraises. | ||
+ | titi les cerises. | ||
</code> | </code> | ||
<note tip> | <note tip> | ||
- | *__sed et awk__\\ Ces commandes étant faites pour travailler le contenu des fichiers, et non pour la recherche de fichiers, elles n'utilisent pas les métacaractères du shell. | + | Pour vi (vim), il faut avoir ouvert le fichier pour utiliser les expressions rationnelles, |
+ | mais on peut utiliser les métacaractères pour ouvrir plusieurs fichiers en même temps.\\ | ||
+ | |||
+ | Par exemple en étant au niveau du fichier "~/ERetCMD/Dossier" : | ||
+ | |||
+ | <code user>vim smolski-*</code> | ||
+ | |||
+ | Les fichiers "smolski-awk.txt" et "smolski-sed.txt" seront ouverts.\\ | ||
+ | Et pour passer de l'un à l'autre : on tape au clavier '':next'', pour passer au second, si on se trouve devant le premier;\\ | ||
+ | ou '':previous'', si l'on se trouve devant le second et qu'on veut revenir au premier. | ||
+ | D'autres exemples un peu plus détaillés sur [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes#la-commande-sed-et-les-caracteres-communs-aux-erb-et-ere|sed]], [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes#awk-et-les-caracteres-communs-aux-erb-et-ere|awk]] et [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes#l-editeur-de-texte-vi-n-utilise-aussi-que-les-erb|vim]] seront donnés. | ||
</note> | </note> | ||
- | **Puisque tout est bien clair, nous pouvons aller plus loin, et présenter comment utiliser les programmes GNU/Linux permettant d'utiliser les expressions rationnelles. Cela permettra aussi, non seulement de distinguer ERb, ERe et classes, mais encore d'en apprécier les différents types.** 8-) | + | **Puisque tout est bien clair, nous pouvons aller plus loin, et présenter le détail des expressions rationnelles ainsi que leur utilisation avec les programmes GNU/Linux. Cela permettra, non seulement de distinguer ERb, ERe et classes, mais encore d'en apprécier les différences.** 8-) |
=====Les expressions rationnelles basiques et les commandes GNU/Linux===== | =====Les expressions rationnelles basiques et les commandes GNU/Linux===== | ||
Ligne 251: | Ligne 342: | ||
</note> | </note> | ||
- | * Soit le fichier "liste1-nom" : | + | ===Préparation === |
- | <code> | + | * Dans le répertoire "~/ERetCMD/" inscrire le contenu suivant dans le fichier "liste1-nom" : |
+ | <code>cd ~/ERetCMD/ && cat >> liste1-nom << EOF | ||
1 2 Francine | 1 2 Francine | ||
2 3 Édith | 2 3 Édith | ||
Ligne 265: | Ligne 357: | ||
6 8 Amanda | 6 8 Amanda | ||
+ | EOF | ||
</code> | </code> | ||
>La dernière ligne du fichier est vide. | >La dernière ligne du fichier est vide. | ||
- | ===le caractère début de ligne ^ === | + | ===Le caractère début de ligne ^ === |
<code user>grep "^4" liste1-nom</code> | <code user>grep "^4" liste1-nom</code> | ||
4 5 Béatrice | 4 5 Béatrice | ||
- | *le caractère fin de ligne $ | + | ===Le caractère fin de ligne $ === |
<code user>grep "e$" liste1-nom</code> | <code user>grep "e$" liste1-nom</code> | ||
Ligne 288: | Ligne 380: | ||
<code user>grep "^$" liste1-nom</code> | <code user>grep "^$" liste1-nom</code> | ||
- | ===le point=== | + | ===Le point=== |
<code user>grep ".dith" liste1-nom</code> | <code user>grep ".dith" liste1-nom</code> | ||
2 3 Édith | 2 3 Édith | ||
- | ===l'étoile=== | + | ===L'étoile=== |
<code user>grep "A*" liste1-nom</code> | <code user>grep "A*" liste1-nom</code> | ||
<code> | <code> | ||
Ligne 311: | Ligne 403: | ||
</code> | </code> | ||
- | > Attention, il ne s'agit pas du métacaractère. Étoile signifie "zéro ou plusieurs 'A'" ; **zéro** fois aussi, donc toutes les lignes dépourvues du caractère "A" apparaissent aussi, y compris la ligne vide. | + | > Attention, il ne s'agit pas du métacaractère. Étoile signifie "zéro ou plusieurs 'A'" ; **zéro** fois aussi. Donc toutes les lignes dépourvues du caractère "A" apparaissent aussi, y compris la ligne vide. |
<code user>grep "123 A*" liste1-nom</code> | <code user>grep "123 A*" liste1-nom</code> | ||
Ligne 317: | Ligne 409: | ||
123 AAAAAA | 123 AAAAAA | ||
- | ===les crochets=== | + | ===Les crochets=== |
<code user>grep "[43]" liste1-nom</code> | <code user>grep "[43]" liste1-nom</code> | ||
Ligne 327: | Ligne 419: | ||
>les lignes comportant 4 ou 3 | >les lignes comportant 4 ou 3 | ||
- | ===le caractère d'exclusion d'une liste [^ ]=== | + | ===Le caractère d'exclusion d'une liste [^ ]=== |
>Chaîne qui commence ni par 1, ni par 2, ni par aucun des caractères entre crochets. | >Chaîne qui commence ni par 1, ni par 2, ni par aucun des caractères entre crochets. | ||
Ligne 337: | Ligne 429: | ||
toutefois | toutefois | ||
- | *Chaîne qui ne se termine pas par le caractère "e". | + | *Chaîne qui ne se termine pas l'un des caractères de l'intervalle. |
- | <code user>grep "[^e]$" liste1-nom</code> | + | |
- | + | ||
- | 2 3 Édith | + | |
- | 123 AAAAAA | + | |
- | partout | + | |
- | toutefois | + | |
- | 6 8 Amanda | + | |
- | + | ||
- | *Chaîne qui ne se termine pas l'un des caractères de l'intervalle | + | |
<code user>grep "[^a-z]$" liste1-nom</code> | <code user>grep "[^a-z]$" liste1-nom</code> | ||
Ligne 378: | Ligne 461: | ||
<note tip> | <note tip> | ||
- | Avec find il faut toujours une option pour utiliser une //ER//.\\ | + | Avec find, il faut toujours une option pour utiliser une //ER//.\\ |
* Pour une expression rationnelle basique :\\ | * Pour une expression rationnelle basique :\\ |