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 | ||
utilisateurs:hypathie:tutos:accueil [21/07/2014 13:09] Hypathie [Sed et les regexp simples] |
utilisateurs:hypathie:tutos:accueil [21/07/2014 14:22] paskal suppression à la demande de Hypathie |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Sed et les expressions rationnelles ====== | ====== Sed et les expressions rationnelles ====== | ||
- | **Objet : Apprendre à utiliser les expressions rationnelles spécifiques à sed.** | ||
- | * Niveau requis : {{tag>avisé}} | ||
- | * Commentaires : //Tuto en cours de rédaction // | ||
+ | ==== ==== | ||
- | + | À SUPPRIMER | |
- | =====Sed -r : les caractères étendues ===== | + | |
- | Rappel : | + | |
- | + | ||
- | ''+'' ; ''?'' ; ''|'' ; ''( )'' ; ''['' ; ''{ }'' | + | |
- | + | ||
- | === le caractère (+)=== | + | |
- | + | ||
- | * substituer une ou plusieurs fois "z" par OK | + | |
- | + | ||
- | <code user> | + | |
- | echo "abc azbc azzbc azzzbc azzzzbc" | sed -r 's/az+bc/OK/g' | + | |
- | abc OK OK OK OK | + | |
- | </code> | + | |
- | + | ||
- | === Le caractère ( ? )=== | + | |
- | + | ||
- | * substituer zéro ou une fois "z" par OK | + | |
- | + | ||
- | <code user> | + | |
- | echo "abc azbc azzbc azzzbc azzzzbc" | sed -r 's/az?bc/OK/g' | + | |
- | OK OK azzbc azzzbc azzzzbc | + | |
- | </code> | + | |
- | + | ||
- | === Le ou ( | )=== | + | |
- | + | ||
- | * substituer ab ou cd par OK | + | |
- | + | ||
- | <code user> | + | |
- | echo "abef cdef efgh abcd" | sed -r 's/ab|cd/OK/g' | + | |
- | OKef OKef efgh OKOK | + | |
- | </code> | + | |
- | + | ||
- | * substituer ab ou cd par OK et effacer le reste | + | |
- | + | ||
- | <code user> | + | |
- | echo "lflfabef cdef efgh ftyabcdopm" | sed -r\ | + | |
- | 's/^.*[ab|cd]*/OK/g' | + | |
- | OK | + | |
- | </code> | + | |
- | + | ||
- | ===Les parenthèses === | + | |
- | <code user> | + | |
- | echo "a b c d e f" | sed -r 's/(b|e)/X/g' | + | |
- | </code> | + | |
- | <code> | + | |
- | a X c d X f | + | |
- | </code> | + | |
- | + | ||
- | ===Parenthèses et inversion de champs=== | + | |
- | Avec la commande ''s'' (substitution), on peut de définir plusieurs E.R mises entre parenthèses.\\ | + | |
- | Cela permet de faire une inversion en se servant du séparateur de chaque champ à matcher.\\ | + | |
- | + | ||
- | * Exemple : | + | |
- | <code user> | + | |
- | echo "coucou:toto" | sed -r 's/^(.*):(.*)/\2:\1/' | + | |
- | </code> | + | |
- | <code> | + | |
- | toto:coucou | + | |
- | </code> | + | |
- | + | ||
- | <note tip> | + | |
- | /^\(.*\)\1$/ : correspond à une ligne contenant au moins deux fois la même sous-chaîne de caractères | + | |
- | </note> | + | |
- | + | ||
- | ===Les accolades { et } === | + | |
- | Un seul caractère suivie par ''{m}'', ''{m,}'', ou ''{m,n}'' est une E.R. qui correspond au caractère précédant ''{'' s'il est présent, exactement m fois (''m''); au moins m fois (''m,''); entre "m" et "n" fois (''m,n'').\\ | + | |
- | 'm' et 'n' doivent être des entiers positifs ou nuls inférieurs à 256. | + | |
- | + | ||
- | * substituer seulement "aaa, aaaa et aaaaa" par OK | + | |
- | <code user> | + | |
- | echo "a aa aaa aaaa aaaaaa aaaaaaaa aaaaaaa" | sed -r\ | + | |
- | 's/a{3,5}/OK/g' | + | |
- | a aa OK OK OKa OKOK OKaa | + | |
- | </code> | + | |
- | + | ||
- | * substituer trois "a" et plus par OK | + | |
- | + | ||
- | <code user> | + | |
- | echo "a aa aaa aaaa aaaaaa aaaaaaaa" | sed -r 's/a{3,}/OK/g' | + | |
- | a aa OK OK OK OK | + | |
- | </code> | + | |
- | + | ||
- | ===Traitement des mots === | + | |
- | * le caractère ''\<'' | + | |
- | Le caractère ''\<'' oblige l'E.R. à correspondre avec le début d'un mot (mot = chaîne de caractères chiffres, lettres ou '_').\\ ''\<'' doit figurer devant la sous-chaîne désirée. | + | |
- | <code user> | + | |
- | echo "info pour tous informatique" | sed -r 's/\<info/OK/g' | + | |
- | </code> | + | |
- | <code> | + | |
- | OK pour tous OKrmatique | + | |
- | </code> | + | |
- | + | ||
- | * le caractère ''\>'' | + | |
- | Le caractère ''\>'' oblige l'E.R. à correspondre à la fin d'un mot.\\ ''\>'' doit figurer en fin de la sous-chaîne désirée. | + | |
- | <code user> | + | |
- | echo "métrique cosmétique" | sed -r 's/métique\>/OK/g' | + | |
- | </code> | + | |
- | <code> | + | |
- | métrique cosOK | + | |
- | </code> | + | |
- | + | ||
- | ====Les sous-chaînes : associer ( ), [ ], { }==== | + | |
- | * substituer "Hello" par OK | + | |
- | <code user> | + | |
- | echo "coucou Hello Yep" | sed -r 's/[A-Z]{1}[a-z]{4}/OK/g' | + | |
- | </code> | + | |
- | <code> | + | |
- | coucou OK Yep | + | |
- | </code> | + | |
- | + | ||
- | * substituer "ABC-123 abc-123" par OK | + | |
- | + | ||
- | <code user> | + | |
- | echo "ABC-123 abc-123" | sed -r 's/[A-Z]{3}-[[:digit:]]{3}\ | + | |
- | [[a-z]{3}-[[:digit:]]{3}/OK/' | + | |
- | OK | + | |
- | </code> | + | |
- | + | ||
- | <note tip> | + | |
- | SHELL : ''\''\\ | + | |
- | + | ||
- | -> Les longues commandes peuvent être sectionnées avec :\\ | + | |
- | + | ||
- | \<retour à la ligne>[<espace>] | + | |
- | + | ||
- | </note> | + | |
- | + | ||
- | * substituer "ab efab ef" par OK | + | |
- | + | ||
- | <code user> | + | |
- | echo "123ab efab ef123" | sed -r 's/(ab[[:blank:]]ef){2}/OK/' | + | |
- | 123OK123 | + | |
- | </code> | + | |
- | + | ||
- | * substituer "123ab efab ef123" par trois "OK" | + | |
- | + | ||
- | <code user> | + | |
- | echo "123ab efab ef123" | sed -r -e 's/(ab[[:blank:]]ef){2}/OK/g'\ | + | |
- | -e 's/[[:digit:]]{3}/OK/g' | + | |
- | OKOKOK | + | |
- | </code> | + | |
- | + | ||
- | * substituer jusqu'à trois "a" par OK | + | |
- | <note tip> | + | |
- | Attention !\\ La E.R ''{,m}'' n'est pas utilisée avec sed.\\ Les chaînes comportant plus de trois "a" contiennent aussi moins de trois "a" ! | + | |
- | <code user> | + | |
- | echo "a aa aaa aaaa aaaaaa aaaaaaaa" | sed -r 's/a{,3}/OK/g' | + | |
- | OK OK OK OKOK OKOK OKOKOK | + | |
- | </code> | + | |
- | + | ||
- | <code user> | + | |
- | echo "a aa aaa aaaa aaaaaa aaaaaaaa" | sed -r\ | + | |
- | 's/(a{1}[[:blank:]]|a{2}[[:blank:]])/OK/g' | + | |
- | OKOKaOKaaOKaaaaOKaaaaaaaa | + | |
- | </code> | + | |
- | </note> | + | |
- | <code user> | + | |
- | echo "a aa aaa aaaa aaaaaa aaaaaaaa" | sed -r\ | + | |
- | -e 's/(a{1}[[:blank:]])/OK/' -e 's/(a{2}[[:blank:]])/OK/' | + | |
- | OKOKaaa aaaa aaaaaa aaaaaaaa | + | |
- | </code> | + |