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 :
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 :
donc :![]()
![]()
![]()
![]()
![]()
![]()
Nous obtenons donc :
sed -e 's/^\([^:]*\)\(:[^:]*:\)\([^:]*\)\(.*$\)/\1\t\3/' /etc/passwd