-->

Búsqueda y Filtrado de Texto con el Comando Grep

Objetivo:

Dominar el uso fundamental del comando grep (Global Regular Expression Print) para la búsqueda de cadenas de texto y patrones dentro de archivos, utilizando modificadores avanzados (-s, -l, -c, -i) y canalizando salidas de comandos en tiempo real mediante tuberías (|) e integración con wc.

Escenario:

  • Herramientas: Terminal de Linux y un sistema Debian o basado en Debian.
  • Conceptos clave: Búsqueda de patrones (grep), supresión de errores (-s), listado de archivos coincidentes (-l), recuento de ocurrencias (-c), insensibilidad a mayúsculas/minúsculas (-i), inspección de registros (/var/log), filtrado de cuentas de usuario (/etc/passwd) y encadenamiento mediante tuberías (|).

Instrucciones:

Fase 1: Búsqueda básica de cadenas de texto y metacaracteres

  • Abre la terminal de Linux en tu directorio de usuario.
  • Busca la cadena exacta "tomas" dentro del archivo nombres generado en lecciones anteriores:
  • grep tomas nombres
  • Extiende la búsqueda a todos los ficheros del directorio actual usando el comodín asterisco (*):
  • grep tomas *
  • Observa los avisos o advertencias (warnings) que genera la terminal al intentar buscar dentro de directorios.
  • Silencia las advertencias de directorios y errores de permisos utilizando la opción -s:
  • grep -s tomas *

Fase 2: Inspección de archivos de registro del sistema (/var/log)

  • Navega hasta el directorio de registros o logs del sistema operativo:
  • cd /var/log
  • Visualiza la lista de archivos de registro disponibles:
  • ls -l
  • Busca la palabra "error" dentro de todos los archivos con extensión .log:
  • grep error *.log
  • Suprime los mensajes de error por permisos denegados agregando el modificador -s:
  • grep -s error *.log
  • Obtén únicamente el nombre de los archivos que contienen la palabra "error" utilizando la combinación -sl:
  • grep -sl error *.log
  • Muestra el recuento numérico de coincidencias por cada archivo aplicando el modificador -sc:
  • grep -sc error *.log
  • Realiza una búsqueda insensible a mayúsculas y minúsculas (buscando "error", "ERROR", "Error") añadiendo el parámetro -i:
  • grep -si error *.log

Fase 3: grep como filtro con tuberías (|)

  • Regresa a tu directorio personal ejecutando el comando:
  • cd
  • Lista los elementos de tu directorio e identifica los que contienen la letra "D" mayúscula canalizando la salida de ls hacia grep:
  • ls | grep D
  • Combina la búsqueda anterior con wc -l para contar cuántos elementos coinciden con el filtro:
  • ls | grep D | wc -l
  • Dirígete de nuevo a /var/log y filtra el listado detallado (ls -l) buscando ficheros modificados en una fecha específica (encerrando el texto entre comillas dobles):
  • cd /var/log
    ls -l | grep "Apr 28"

Fase 4: Filtrado avanzado en ficheros de configuración del sistema

  • Regresa al directorio personal y examina el archivo /etc/passwd mediante cat y grep para identificar a los usuarios de sistema que tienen asignada la shell nologin:
  • cd
    cat /etc/passwd | grep nologin
  • Cuenta cuántos usuarios del sistema no tienen acceso interactivo (shell nologin) añadiendo wc -l a la tubería:
  • cat /etc/passwd | grep nologin | wc -l
  • Filtra y cuenta los usuarios reales del sistema que utilizan la shell interactiva bash:
  • cat /etc/passwd | grep bash | wc -l
  • Muestra los nombres y la línea completa de las cuentas que usan bash eliminando el recuento final:
  • cat /etc/passwd | grep bash
  • Limpia la pantalla de la terminal:
  • clear

Preguntas de reflexión:

  1. ¿Cuál es la función principal del comando grep en los sistemas GNU/Linux?
  2. ¿Qué sucede si intentamos ejecutar grep sobre un directorio sin utilizar modificadores especiales?
  3. ¿Para qué sirve la opción -s en grep y qué tipo de mensajes evita que aparezcan en pantalla?
  4. ¿Qué diferencia existe entre ejecutar grep error *.log y grep -l error *.log?
  5. ¿Qué beneficio aporta el modificador -i al realizar búsquedas de texto con grep?
  6. ¿Por qué es recomendable encerrar entre comillas dobles los patrones de búsqueda que contienen espacios (ejemplo: "Apr 28")?
  7. ¿Cómo actúa el comando grep cuando recibe datos a través de una tubería (|) en lugar de recibir un archivo como argumento?
  8. ¿Qué información devuelve la combinación de comandos cat /etc/passwd | grep nologin | wc -l?
  9. ¿Cómo podemos identificar a los usuarios con acceso a la consola interactiva bash en el fichero /etc/passwd usando grep?
  10. ¿En qué escenarios de administración de sistemas es útil combinar ls -l con grep?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Cuál es la función principal del comando grep en los sistemas GNU/Linux?

Su función principal es buscar cadenas de texto, caracteres o patrones dentro de uno o varios archivos, o bien filtrar la salida estandarizada de otros comandos cuando se utiliza canalizado por tuberías.


2. ¿Qué sucede si intentamos ejecutar grep sobre un directorio sin utilizar modificadores especiales?

La terminal devuelve una advertencia (warning) indicando que el elemento es un directorio, ya que por defecto grep solo examina el texto de archivos regulares y no el contenido interno de las carpetas.


3. ¿Para qué sirve la opción -s en grep y qué tipo de mensajes evita que aparezcan en pantalla?

Sirve para silenciar o suprimir los mensajes de error y advertencias relativos a archivos inexistentes, problemas de lectura o avisos por intentar acceder a directorios o rutas sin permisos.


4. ¿Qué diferencia existe entre ejecutar grep error *.log y grep -l error *.log?

Sin la opción -l, grep muestra cada una de las líneas completas donde aparece la palabra buscada. Con la opción -l (lower-case L), solo muestra los nombres de los archivos que contienen dicha palabra, omitiendo las líneas de texto.


5. ¿Qué beneficio aporta el modificador -i al realizar búsquedas de texto con grep?

Hace que la búsqueda sea insensible a mayúsculas y minúsculas (case-insensitive), permitiendo localizar variaciones como "Error", "ERROR" o "error" bajo una misma consulta.


6. ¿Por qué es recomendable encerrar entre comillas dobles los patrones de búsqueda que contienen espacios (ejemplo: "Apr 28")?

Porque las comillas le indican al intérprete de comandos (Shell) que todo el texto contenido dentro de ellas forma un único argumento de búsqueda, evitando que el espacio sea interpretado como la separación entre el patrón y el nombre de un archivo.


7. ¿Cómo actúa el comando grep cuando recibe datos a través de una tubería (|) en lugar de recibir un archivo como argumento?

Lee el flujo de datos procedente de la salida estándar del comando anterior y procesa línea a línea dicho texto, devolviendo únicamente aquellas líneas que coinciden con la cadena o patrón especificado.


8. ¿Qué información devuelve la combinación de comandos cat /etc/passwd | grep nologin | wc -l?

Lee el archivo de usuarios del sistema, filtra únicamente las líneas que corresponden a cuentas restringidas sin shell interactivo (nologin) y cuenta el número total de este tipo de usuarios de servicio o sistema.


9. ¿Cómo podemos identificar a los usuarios con acceso a la consola interactiva bash en el fichero /etc/passwd usando grep?

Ejecutando el comando grep bash /etc/passwd (o bien cat /etc/passwd | grep bash), el cual devuelve las líneas completas de las cuentas de usuario que tienen asignada la intérprete de comandos /bin/bash.


10. En qué escenarios de administración de sistemas es útil combinar ls -l con grep?

Es muy útil para filtrar listas extensas de archivos por fechas de modificación, permisos, propietario o fragmentos concretos en el nombre de los ficheros sin tener que examinar visualmente toda la lista.


Ficha de Laboratorio: Búsqueda y Filtrado de Texto con el Comando Grep

Instrucciones de entrega:

  1. Rellena los campos y responde en este formulario desde tu navegador.
  2. Pulsa el botón de imprimir al final de la página.
  3. Selecciona "Guardar como PDF" en el diálogo de impresión.
  4. Entrega el archivo PDF en el aula virtual.

Alumno/a:      Fecha:      

Grupo:


Completa la ficha realizando las siguientes actividades:

  1. Realiza búsquedas sencillas en ficheros y suprime advertencias con grep -s.
    Escribe la orden para buscar el texto "tomas" en todos los ficheros del directorio actual silenciando errores y advertencias de directorio:

    Copia la salida devuelta por la consola:

    Explica por qué es útil añadir el parámetro -s al buscar con comodines como *:
  2. Inspecciona registros del sistema en /var/log aplicando opciones avanzadas de grep.
    Escribe la orden para listar solo los nombres de los archivos .log que contienen la palabra "error" (ignorando fallos de lectura):

    Copia los nombres de ficheros obtenidos o el resultado de la terminal:

    Explica la diferencia entre usar la opción -l (mostrar archivos) y la opción -c (contar coincidencias):
  3. Filtra búsquedas complejas con comillas e insensibilidad a mayúsculas/minúsculas.
    Escribe la orden para buscar el término "error" en *.log sin hacer distinción entre mayúsculas y minúsculas:

    Copia la respuesta obtenida en la terminal:

    Explica por qué es aconsejable usar -i al analizar logs de aplicaciones desarrolladas por terceros:
  4. Canaliza la salida de comandos de sistema (ls -l) hacia grep mediante tuberías.
    Escribe el comando para filtrar un listado ls -l en /var/log buscando entradas de una fecha concreta (ejemplo: "Apr 28"):

    Copia la línea o líneas filtradas por la terminal:

    Explica por qué el patrón con fecha debe escribirse entre comillas dobles:
  5. Audita cuentas de usuarios en /etc/passwd combinando grep y wc -l.
    Escribe la orden en tubería para contar cuántas cuentas tienen asignada la shell interactiva bash:

    Copia el resultado numérico obtenido y los nombres de los usuarios asociados:

    Explica qué diferencia a un usuario con shell bash de uno con shell nologin en Linux: