SMR-SOM-Linux

IES Castro da Uz

Práctica SOM — Expresiones regulares (REGEX)

Entorno creado por crear_entorno_grepUNIX.sh en el directorio practica_grep/. Estructura de ficheros:

practica_grep/
├── personas.txt
├── formularios.txt
├── registros.log
└── internacional.txt

Script para a creación do entorno


EJ 1 — Buscar todos los DNI válidos

Busca en personas.txt todas las líneas que contengan un DNI español válido. Un DNI tiene 8 dígitos seguidos de una letra mayúscula (se excluyen I, O, U y Ñ).

grep -E "[0-9]{8}[ABCDEFGHJKLMNPQRSTVWXYZ]" practica_grep/personas.txt

EJ 2 — Extraer solo el número de DNI

Usando -o, extrae únicamente el valor del DNI (sin el resto de la línea) de todos los ficheros .txt.

grep -Eo "[0-9]{8}[ABCDEFGHJKLMNPQRSTVWXYZ]" practica_grep/*.txt

EJ 3 — Detectar DNI con formato incorrecto

En formularios.txt hay registros con DNI malformados: menos de 8 dígitos, letra en minúscula o letra inválida. Encuentra las líneas con campo doc: cuyo valor no cumple el formato estándar.

grep "doc:" practica_grep/formularios.txt | grep -Ev "doc: [0-9]{8}[ABCDEFGHJKLMNPQRSTVWXYZ]"

EJ 4 — Buscar direcciones de email válidas

Busca en personas.txt líneas con un email de formato correcto (usuario@dominio.tld). El usuario puede contener letras, números, ., -, _; el TLD debe tener al menos 2 letras.

grep -E "[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" practica_grep/personas.txt

EJ 5 — Detectar emails sin dominio válido

En formularios.txt hay emails incorrectos: sin dominio, con corchetes en lugar de @, o sin @. Filtra las líneas cuyo campo contacto: no contiene un email válido.

grep "contacto:" practica_grep/formularios.txt | grep -Ev "contacto: [a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"

EJ 6 — Emails solo del dominio gmail.com

Busca en todos los ficheros .txt emails del dominio gmail.com. Muestra el fichero de origen.

grep -EH "[a-zA-Z0-9._-]+@gmail\.com" practica_grep/*.txt

EJ 7 — Extraer números de móvil españoles de personas.txt

Los móviles españoles empiezan por 6 o 7 y tienen 9 dígitos. Pueden aparecer con espacios, guiones o sin separadores.

grep -Eo "[67][0-9]{2}[ -]?[0-9]{3}[ -]?[0-9]{3}" practica_grep/personas.txt

EJ 8 — Móviles con prefijo internacional en internacional.txt

Busca móviles que incluyan prefijo +34 o 0034 y extrae el número completo.

grep -Eo "(\+34|0034)[ -]?[67][0-9]{2}[ -]?[0-9]{3}[ -]?[0-9]{3}" practica_grep/internacional.txt

EJ 9 — Contar líneas con móvil válido por fichero

Usa -c para contar cuántas líneas con un móvil válido hay en cada fichero .txt.

grep -Ec "[67][0-9]{2}[ -]?[0-9]{3}[ -]?[0-9]{3}" practica_grep/*.txt

EJ 10 — Líneas en registros.log con DNI, email y teléfono a la vez

Encuentra las líneas que contienen los tres tipos de datos simultáneamente, encadenando grep con pipes.

grep -E "[0-9]{8}[ABCDEFGHJKLMNPQRSTVWXYZ]" practica_grep/registros.log \
  | grep -E "[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" \
  | grep -E "[67][0-9]{8}"