next up previous contents index
suivant: Exemple 5 monter: Exemples avancés précédent: Exemple 3   Table des matières   Index


Exemple 4

Le but de cet exemple est de récupérer le champ « login » et « UID » du fichier « /etc/passwd ».

D'après le format utilisé pour ce fichier (explicité dans passwd(5)), tous les champs sont séparés par le caractère « : ». Par conséquent, le contenu de chaque champ interdit l'utilisation de ce caractère. Les champs de ce fichier auront donc comme propriété :

Les caractères contenus pour chaque champ du fichier /etc/passwd sont tous les caractères alphanumériques valides à l'exception du caractère « : ».
Pour représenter une chaîne de caractères ne contenant pas « : » à l'aide des expressions régulières, nous allons utiliser les plages de caractères en excluant les caractères non valides. Nous aurons donc :
[^:]*

Les champs « login » et « UID » représentent les premier et troisième champ du fichier « /etc/passwd ». Par conséquent, la méthode à suivre pour décrire notre requête est la suivante :

Nous avons donc identifié quatre groupements :

Examinons maintenant l'expression régulière associée :

 Description   Expression  
 début de ligne   ^  
 séquence de caractères ne contenant pas « : »   [^:]*  
 le caractère « : »   :  
 séquence de caractères ne contenant pas « : »   [^:]*  
 le caractère « : »   :  
 séquence de caractères ne contenant pas « : »   [^:]*  
 séquence de caractères quelconques   .*  
 fin de ligne   $  

En fonction des regroupements explicités précédemment, nous obtenons l'expression suivante :

^\([^:]*\)\(:[^:]*:\)\([^:]*\)\(.*$\)

Maintenant, il ne nous reste plus qu'à prendre tout ce qui correspond au premier et troisième regroupement dans chaque enregistrement (lignes arrivant sur l'entrée standard), et formater la sortie de la façon suivante :

\fbox{{\sl login}}  \fbox{\textsc{tab}}  \fbox{{\sl UID}}
donc :
\fbox{{\sl regroupement$_1$}}  \fbox{\textsc{tab}}  \fbox{{\sl regroupement$_3$}}

Nous obtenons donc :

sed -e 's/^\([^:]*\)\(:[^:]*:\)\([^:]*\)\(.*$\)/\1\t\3/' /etc/passwd


next up previous contents index
suivant: Exemple 5 monter: Exemples avancés précédent: Exemple 3   Table des matières   Index
baudry@esme.fr