Tengo un archivo: cada línea consta de un nombre, número de habitación, dirección de la casa, número de teléfono.

Quiero buscar las líneas que tienen los códigos de área 404 o 202. Hice "(404) | (202)", pero también me da líneas que tienen los números en el número de teléfono en general en lugar del código de área , ejemplo:

John Smith 300 123 N. Street 808-543-2029

No quiero lo anterior, estoy apuntando a líneas como esta, ejemplos:

Danny Brown 173 555 W. Avenue 202-383-1540
Martha Keith 567 322 S. Example 404-653-1200
1
Anymee 16 feb. 2018 a las 08:45

2 respuestas

La mejor respuesta

Consideremos este archivo de prueba:

$ cat addresses
John Smith 202 404 N. Street 808-543-2029
Danny Brown 173 555 W. Avenue 202-383-1540
Martha Keith 567 322 S. Example 404-653-1200

La característica distintiva de los códigos de área, a diferencia de otros números de tres dígitos, es que tienen un espacio antes y un - después. Por lo tanto, use:

$ grep -E ' (202|404)-' addresses
Danny Brown 173 555 W. Avenue 202-383-1540
Martha Keith 567 322 S. Example 404-653-1200

Ejemplo más complejo

Suponga que los números de teléfono aparecen al final de las líneas, pero pueden tener cualquiera de las tres formas 808-543-2029, 8085432029 o 808 543 2029 como en el siguiente ejemplo:

$ cat addresses
John Smith 202 404 N. Street 808-543-2029
Danny Brown 173 555 W. Avenue 2023831540
Martha Keith 567 322 S. Example 404 653 1200

Para seleccionar las líneas con códigos de área 202 o 404:

$ grep -E ' (202|404)([- ][[:digit:]]{3}[- ][[:digit:]]{4}|[[:digit:]]{7})$' addresses
Danny Brown 173 555 W. Avenue 2023831540
Martha Keith 567 322 S. Example 404 653 1200

Si es posible que los números de teléfono estén seguidos por espacios en blanco perdidos, utilice:

$ grep -E ' (202|404)([- ][[:digit:]]{3}[- ][[:digit:]]{4}|[[:digit:]]{7})[[:blank:]]*$' addresses
Danny Brown 173 555 W. Avenue 2023831540
Martha Keith 567 322 S. Example 404 653 1200
2
John1024 17 feb. 2018 a las 03:15

Debe agregar un token de límite de palabra \b justo al comienzo de la expresión, como \b(202|404).

Demostración.

0
PJProudhon 16 feb. 2018 a las 05:58