Navigation Principale
bullet Accueil
Photos
bullet Articles
bullet Forum
bullet Liens
bullet Membres
bullet News
bullet Proposition de News
bullet Téléchargements
bullet Content Index
 
Bienvenue
Nom d'utilisateur:

Mot de passe:


Retenir l'identification

[ ]
[ ]
En ligne
Invités: 5, Membres: 0 ...

Record: 51
(Membres: 0, Invités: 51) le 02 avr : 02:42

Membres: 145
Dernier membre: danync
Ajouts récents
Windows
Delphi
membres
11 nov winston
19 jui danync
18 jun c-lotre
06 mar volvic
16 fév snah
Forum
Page de Liens
Rechercher des chaînes de caractères avec grep (2)
le samedi 13 janvier 2007
par admin Contributions de l'auteur
dans Linux

grep et egrep : les expressions régulières

La version normale grep , egrep et la variante grep - E se distinguent de grep
par le fait qu'elles recherchent uniquement la chaîne indiquée comme motif de
recherche, mais par la possibilité de spécifier une "expression régulière"
comme condition de recherche, ce motif étant susceptible de s'appliquer à un
grand nombre de chaînes de caractères. Une expression régulière peut
comprendre différents composants.

Motifs de recherche, correspondant à des caractères définis

• Tous les caractères sans signification particulière se cherchent "eux-
mêmes", en d'autres termes ils ne correspondent qu'à un seul signe dans
le flux d'entrée. Cela concerne tous les caractères alphanumériques et
les espaces ainsi que quelques-uns des caractères spéciaux (pour autant
qu'ils ne soient pas indiqués ci-après).

• Par exemple, le motif "Bonjour tout le monde" fonctionne à l'identique
dans tous les modes de fonctionnement de grep ; il correspond toujours
à une ligne d'entrée si elle contient exactement cette chaîne de
caractères.

• Un point . correspond à tout caractère en entrée. Le motif x.y
sélectionne toutes les lignes contenant un X, un y et, entre les deux, un
caractère unique quelconque.

• Deux crochets correspondent à exactement un caractère parmi ceux qui
sont indiqués. Par exemple, les caractères a, b, c et d correspondent
chacun au motif [abcd]. Une plage de caractères cohérente (selon
l'ordre des caractères du code ASCII) peut être représentée par une
plage de deux caractères séparés par un tiret : [a-z] comprend de la
même manière que [a-mnopq-z] l'ensemble des lettres minuscules de
l'alphabet de a à z.

• La spécification ^[] peut également être utilisée pour une sélection
négative : si le premier caractère après le crochet ouvrant est un accent
circonflexe, l'expression entre crochets correspond à tous les caractères
non spécifiés. Le motif [ 0-9] permet par exemple de rechercher un
caractère non numérique.

Opérateurs de répétition :

○Chaque motif peut recevoir un opérateur de répétition figurant immé-
diatement à la suite du motif. Dans le cas le plus simple, il s'agit d'un
nombre entre accolades : x{4} équivaut à xxxx et représente au mieux
une simplification d'écriture. Une indication plus intéressante est
l'indication de la répétition : x{2,4} correspond à une chaîne de
caractères de 2 à 4 x dans les données. On utilise les caractères suivants
pour quelques cas de figure fréquents :

MOTIFS

x? comme x { 0,1 } : 0 ou 1 fois
x* comme x{0, } : 0 ou n fois
x+ comme x{1,} :au moins une fois, ou n fois

Prise en compte des bornes des mots .

Si le motif est précédé d'un accent circonflexe ^, le contrôle de la
correspondance avec le motif n'est réalisé qu'une fois au début
de chaque ligne lue. De la même façon, un signe dollar $ fait débuter la recherche à la fin : si le motif se termine par $ il n'y a de réponse que s'il correspond exactement à la fin de la ligne.

Regroupements :

Les caractères de regroupement vous introduisent dans les subtilités des
expressions régulières. Vous pouvez utiliser des parenthèses pour
regrouper des séquences de motifs, qui peuvent à leur tour être suivies
d'un opérateur de répétition. Vous pouvez utiliser une barre verticale
pour séparer des alternatives à l'intérieur d'une séquence de motifs (et
aussi entre des parenthèses).

Les exemples suivants nous permettront d'illustrer ces définitions relativement abstraites :





































MOTIFSLIGNERésultat
xy*z abcxyyyyzdeCorrespond, parce que y* correspond à plusieurs Y
xy*z abc xz Correspond, parce que y* peut également signifier "aucun y"
a.+bcabcNe correspond pas, parce que .+ suppose au moins un caractère quelconque
^xxxyyyw xxxyyyNe correspond pas, parce que la chaîne de caractères ne figure pas à gauche
^.*$abcxyyyyzdeCorrespond, parce que tout correspond
[a-zA-Z0-9]+abc xz Ne correspond pas, parce que l'espace ne figure pas dans le motif


















































Astuce

Tester les expressions régulières

Pour tester les effets d'une commande grep comprenant
des expressions de recherche régulières, vous pouvez former un tuyau
simple à partir d'echo et d'un grep :

echo QonneesTest | grep Motif

Si la sortie de DonneesTest est effectuée, le motif a pu être
appliqués avec succès sur ces données;
si le résultat est nul, le motif ne correspondait pas.


Les différentes variantes de grep se distinguent par les caractères qu'elles
reconnaissent comme caractères spéciaux dans le motif de recherche. Le tableau
ci-après indique quelle notation avec ou sans barre oblique inverse initiale)
déclenche une fonction spéciale, telle qu'elle vient d'être décrite. Si cette
fonction n'est pas souhaitée, si donc un point ne doit par exemple correspondre
qu'à un point et non pas à tout caractère en entrée, c'est l'autre notation qui doit
être choisie (le point doit alors être précédé d'une barre oblique inverse).



Programme Caractères spéciaux actifs



grep [...] * \\? \\+ \\{...\\} \\(...\\) \\|



egrep [...] * ? + \\{...\\} (...) |



grep-E [...] * ? + \\{...\\} (...) |





Les raisons de l'existence de ces différentes variantes et règles définissant
l'utilisation de la barre oblique inverse ont un arrière-plan historique sans
parler des exigences en matière de compatibilité).
Sélectionnez la variante de la commande correspondant à votre goût. Les utilisateurs d'Unix, qui sont réputés ne pas être des inconditionnels du clavier, utilisent grep, lorsque le motif ne contient pratiquement pas de fonction spéciale, et egrep ou grep-E, lorsqu'il y en a plusieurs.

Remarque

Les caractères génériques et les expressions régulières

Les motifs ont un air de famille avec les caractères génériques qui sont
évalués par l'interpréteur de ligne de commande.
Mais les ressemblances avec les expressions régulières sont plutôt vagues ; les caractères génériques de l'interpreteur de ligne de commande sont certes plus simples d'emploi, mais offrent un champ de fonctionnalités
plus restreint.
L'indication d'une portion de chaîne quelconque, qui est
possible dans les expressions génériques avec l'astérisque
*, doit par exemple être représentée dans une expression
régulière par un point suivi de l'astérisque *. En effet,
l'astérisque seul indique ici un facteur de répétition.

Il existe une autre différence: l'interpréteur de ligne de commande analyse
les indications utilisant les caractères génériques toujours en rapport avec un
répertoire, c'est-à -dire que les barres obliques entre les niveaux de répertoire
doivent toujours être spécifiées et ne peuvent pas être représentées par un
astérisque ou d'autres caractères génériques. Dans les expressions régulières,
aucun traitement particulier de ce type n'est réalisé pour les barres obliques.


Traitement progressif des expressions régulières

Les expressions régulières pour les commandes grep sont plus simples à créer
que cela n'en a l'air. Cependant, lorsqu'elles atteignent une certaine longueur,
elles sont quelque peu difficiles à lire et à suivre dans leur fonctionnement (par
un utilisateur humain). Croyez-en notre expérience : vous avez tout intérêt Ã
bien documenter vos propres créations (l'idéal étant de faire précéder les
lignes de commentaires du signe #).

L'exemple suivant nous permettra de créer une expression régulière, à l'aide
de laquelle le fichier /etc/passwd sera parcouru pour y rechercher toutes les
lignes possédant un compte utilisateur avec une valeur numérique égale à 0,
de sorte que la commande egrep Motif /etc/passwd puisse au moins filtrer la
ligne pour root, pour voir s'il existe d'autres comptes privilégiés.

Les parties représentées par une case correspondent à des parties non finies
de l'expression régulière.

1. Analysez pour commencer la structure des données d'entrée, qui sont très
simples ici, chaque ligne du fichier de mots de passe est basée sur le modèle
suivant:
Identificateur:MotDePasse:NumeroUtilisateur:NumeroGroupe :

2. Utilisez la structure de données pour noter les parties fixes du motif, qui
doivent correspondre à des séparateurs, des mots, etc. Le reste peut être
représenté pour l'instant sous forme de cases et doit être concrétisé dans les
étapes suivantes:

3. Si le motif de recherche doit être fixé à gauche ou à droite de la ligne, le
moment est venu d'utiliser le signe circonflexe ou dollar. Il est important,
dans cet exemple, que l'identificateur figure au début de la ligne ; le bord
droit ne présente aucun intérêt, dans la mesure où les autres données peuvent
être ignorées dans la ligne.

^[Identificateur] : [MotDePasse] : [Numero] :

4. Si une des parties inachevées est formée d'une chaîne de caractères
appartenant au même type, il convient d'utiliser un opérateur de répétition.
Nous avons ici un identificateur et un mot de passe qui comprennent chacun
un caractère au moins (qui reste à déterminer) et un numéro, constitué de
chiffres uniquement :

^[Caractere] +: [Caractere] +: [Chiffre] +:

Pour faire "ressortir" les répétitions, il est parfois nécessaire de déstructurer
une case ; en l'occurrence, ce n'est heureusement pas nécessaire.

5. Observez maintenant les parties à répéter: sont-elles fixées" Dans le cas
présent, cela s'applique au Chiffre, car nous recherchons la valeur
numérique zéro :

[Caractere] +: [Caractere] +: 0+:

6.À quelles règles les autres parties inachevées sont-elles soumises ? Avant de
commencer à énumérer dans cet exemple les caractères qui sont autorisés
dans un nom d'utilisateur, acceptez cette consigne "Tout sauf les deux-points". Il en est de même pour le mot de passe.

7.Nous avons ainsi achevé la définition d'une expression régulière, qu'il nous
reste à vérifier en l'utilisant dans une commande egrep (à protéger par des
apostrophes).

localhost:- $ egrep'^[^:]+:[^:]+:0+:' /etc/passwd
root:x:0:0:root:/root:/bin/bash

localhost:- $

Le résultat de cette commande est rassurant à double titre : premièrement
parce que l'expression régulière a fonctionné, ensuite parce qu'il n'existe
pas d'utilisateur privilégié dans ce système, à part l'administrateur root.

Source MicroApplication pcpoche Linux Toutes distributions
Compteur
Cette page aujourd'hui ...
total: 0
unique: 0

Depuis toujours ...
total: 1159
unique: 716

Site ...
total: 6433
unique: 2532

Recherche TechnoJoly
Sélectionner la langue


Titres

»Bonne lecture avec Magnum 8, le magazine de la communauté francophone de Mandriva Linux
Magnum, c’est maintenant une belle histoire débutée il y a 2 ans. Né de la volonté d’un groupe d’ut ...
»Sortie différée de Google Chrome OS
Bien que l'annonce de la sortie de Chrome O ...
»Organisation de la seconde édition de l'European OpenSource & Free Software Law Event (EOLE) le 9 décembre 2009 au Parlement Européen
L'European OpenSource & Free Software Law Event (EOLE) est un événement qui a pour ambition de favo ...
»Fedora 12 « Constantine » est disponible
Après les phases alpha et bêta, la version finale de la Fedora 12 (Constantine de son petit ...
»Codec OpenSource BroadVoice
Le codec G729 est un standard recommandé par
»Sortie de la version 2.11 de la bibliothèque standard C GNU (glibc)
La version 2.11 de la bibliothèque C GNU (RSS ...
»Firefox, Google, Samsung, X
Firefox : 5 ans et une version pré-3.6

Firefox a 5 ans, et ça se fête par la pu ...
»La gestion des bénévoles facilitée avec OpenVolunteer (v0.2)
Dix mois après la première version, OpenVolunteer vient de sortir en version 0.2. Pour rappel, Open ...
»MimOOo ou « la plus grosse migration OpenOffice.org au monde » en questions
En septembre 2006, DLFP publiait une dépêche intitulée « La plus grosse migration
»Le Libre au service de l'agriculture du Nicaragua
On ne peut que se féliciter lorsque le Logiciel Libre est au service du développement d'un pays du ...
»Le Top 500 de novembre 2009
Le trente-quatrième Top 500 des supercalculateurs mondiaux est sorti aujourd'hui à l'occasion de la ...
»Revue de presse de l'April pour la semaine 46
La revue de presse de l'April est régulièrement ...
»Open Graphics lance la production de l'OGD1
La carte de développement du projet Open Graphics, OGD1, est en cours de fabrication. Les circuits ...
»Soirée Linux et Logiciels Libres sur Sisteron (04)
Nouvelle soirée Linux et Logiciels Libres sur Sisteron organisée par All trademarks are © their respective owners.
TechnoJoly.net n'assume pas la responsabilité
du contenu des sites extérieurs
  
Render time: 0.3734 second(s); 0.0654 of that for queries.