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] |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== 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 // | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | =====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> | ||