martes, 5 de julio de 2016

Validando una lista de teléfonos con grep

En nuestro ejemplo anterior, vimos como comprobábamos si un número telefónico estaba correctamente formateado. Un escenario más realista sería chequear una lista de números en su lugar, así que hagamos una lista. Haremos esto recitando un conjuro mágico a la línea de comandos. Será mágico porque no hemos visto la mayoría de los comandos involucrados, pero no te preocupes. Los veremos en próximos capítulos. Aquí está el conjuro:

[me@linuxbox ~]$ for i in {1..10}; do echo "(${RANDOM:0:3}) ${RANDOM:0:3}-${RANDOM:0:4}" >> phonelist.txt; done

Este comando producirá un archivo llamado phonelist.txt que contiene diez números de teléfono. Cada vez que repetimos el comando, otros diez números se añaden a la lista. También podemos cambiar el valor 10 que está cerca del principio del comando, para producir más o menos números de teléfono. Si examinamos el contenido del archivo, sin embargo, vemos que tenemos un problema:

[me@linuxbox ~]$ cat 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

Algunos números están mal formateados, lo que es perfecto para nuestro propósito, ya que usaremos grep para validarlos.

Un método de validación útil sería escanear el archivo para encontrar números no válidos y mostrar la lista resultante en pantalla:

[me@linuxbox ~]$ grep -Ev '^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$'
phonelist.txt
(292) 108-518
(129) 44-1379
[me@linuxbox ~]$

Aquí usamos la opción -v para producir la coincidencia inversa ya que sólo mostraremos líneas de la lista que no coincidan con la expresión especificada. La propia expresión incluye metacaracteres ancla en los extremos para asegurarnos que el número no tiene caracteres extra al final. Esta expresión también requiere que estén presentes los paréntesis en un número válido, al contrario que nuestro número de teléfono del ejemplo anterior.

No hay comentarios:

Publicar un comentario