<Précédent | Table des matières | Suivant>
Valider une liste téléphonique avec grep
Dans notre exemple précédent, nous avons examiné des numéros de téléphone uniques et vérifié leur mise en forme appropriée. Un scénario plus réaliste consisterait à vérifier une liste de nombres à la place, alors faisons une liste. Nous le ferons en récitant une incantation magique sur la ligne de commande. Ce sera magique car nous n'avons pas couvert la plupart des commandes impliquées, mais ne vous inquiétez pas. Nous y arriverons dans les prochains chapitres. Voici l'incantation :
[moi@linuxbox ~]$ pour i dans {1..10} ; faire echo "(${RANDOM:0:3}) ${RANDO M:0:3}-${RANDOM:0:4}" >> phonelist.txt ; terminé
[moi@linuxbox ~]$ pour i dans {1..10} ; faire echo "(${RANDOM:0:3}) ${RANDO M:0:3}-${RANDOM:0:4}" >> phonelist.txt ; terminé
Cette commande produira un fichier nommé liste téléphonique.txt contenant dix numéros de téléphone. Chaque fois que la commande est répétée, dix autres numéros sont ajoutés à la liste. On peut aussi changer la valeur 10 près du début de la commande pour produire plus ou moins de numéros de téléphone. Si nous examinons le contenu du fichier, cependant, nous voyons que nous avons un problème :
[moi@linuxbox ~]$ chat phonelist.txt
(232) | 298-2265 |
(624) | 381-1078 |
(540) | 126-1980 |
(874) | 163-2885 |
(286) | 254-2860 |
(292) | 108-518 |
(129) | 44-1379 |
(458) | 273-1642 |
(686) | 299-8268 |
(198) | 307-2440 |
Certains des nombres sont mal formés, ce qui est parfait pour nos besoins, puisque nous utiliserons
grep pour les valider.
Une méthode de validation utile serait de rechercher dans le fichier des numéros invalides et d'afficher la liste résultante :
[moi@linuxbox ~]$ grep -Ev '^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$'
liste téléphonique.txt (292) 108-518
(129) 44-1379
[moi@linuxbox ~]$
[moi@linuxbox ~]$ grep -Ev '^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$'
liste téléphonique.txt (292) 108-518
(129) 44-1379
[moi@linuxbox ~]$
Ici, nous utilisons le -v option pour produire une correspondance inverse afin que nous n'affichions que les lignes de la liste qui ne correspondent pas à l'expression spécifiée. L'expression elle-même inclut les métacaractères d'ancrage à chaque extrémité pour garantir que le nombre n'a aucun caractère supplémentaire à chaque extrémité. Cette expression requiert également que les parenthèses soient présentes dans un numéro valide, contrairement à notre exemple de numéro de téléphone précédent.