Comando grep

Comando grep

El comando grep (global regular expression print) es una de las herramientas de búsqueda de texto más potentes y utilizadas en sistemas Unix y Linux. Permite examinar archivos o flujos de datos en busca de líneas que coincidan con un patrón específico o con una expresión regular, facilitando enormemente la localización de información en ficheros de configuración, registros (logs) o códigos fuente.

Categoría Archivos y directorios
Disponible en Linux (GNU grep) / Unix
Equivalente en Windows findstr (CMD / PowerShell), Select-String (PowerShell)
Sustituye a Herramientas clásicas de búsqueda basadas en expresiones regulares antiguas (como ed/grep primitivos).
¿Requiere permisos de administrador? No, salvo que se busquen coincidencias dentro de archivos de sistema restringidos o directorios protegidos.

¿Qué significa su nombre?

GREP proviene de la expresión en inglés Global Regular Expression Print (Imprimir expresión regular global).

Su denominación tiene un origen histórico curioso en el editor de texto ed de Unix, donde la orden g/re/p (global/regular expression/print) se utilizaba para buscar y mostrar líneas que cumplían con un patrón determinado.

¿Para qué sirve?

El comando grep sirve para filtrar y encontrar cadenas de texto dentro de uno o varios archivos, o bien para procesar la salida estándar de otros comandos conectándolos mediante tuberías (pipes |).

Es indispensable para los administradores de sistemas y desarrolladores, ya que permite revisar ficheros de log masivos para detectar errores, buscar directivas concretas en archivos de configuración kilométricos o auditar configuraciones del sistema en cuestión de segundos.

Sintaxis

grep [opciones] [patrón] [archivo...]

Las opciones más habituales son:

Opción Descripción
-i Ignora las mayúsculas y minúsculas durante la búsqueda (case-insensitive).
-r o -R Busca de forma recursiva dentro de todos los archivos de un directorio y sus subcarpetas.
-n Muestra el número de línea en el que se ha encontrado la coincidencia.
-v Invierte el resultado: muestra únicamente las líneas que no coinciden con el patrón.
-c Cuenta el número total de líneas que coinciden con el patrón en lugar de mostrarlas.

Comandos más utilizados

Comando Descripción
grep "palabra" archivo.txt Busca una palabra exacta dentro de un archivo de texto.
grep -i "error" /var/log/syslog Busca la palabra "error" ignorando mayúsculas/minúsculas en un log.
grep -rn "config" /etc/ Busca recursivamente la palabra "config" en todo el directorio /etc mostrando la línea.
ps aux | grep apache Filtra la salida de los procesos en ejecución para localizar los relacionados con apache.

Equivalencia con otros sistemas

Acción Linux antiguo Linux actual Windows
Buscar texto en archivo grep grep / ripgrep (rg) findstr
Filtrar salida de comandos grep grep findstr / Select-String
Búsqueda recursiva de texto grep -r grep -r / grep -R findstr /s

Ejemplos

Buscar una palabra concreta dentro de un archivo de texto

grep "root" /etc/passwd

Buscar ignorando mayúsculas y mostrando el número de línea

grep -in "failed" /var/log/auth.log

Buscar recursivamente una cadena de texto en un directorio completo

grep -rn "ServerName" /etc/apache2/

Combinar grep con otro comando mediante tubería (pipe)

ip addr | grep "inet "

Ejemplo de salida

29:    inet 192.168.1.50/24 brd 192.168.1.255 scope global dynamic enp0s3
55:    inet 127.0.0.1/8 scope host lo

¿Cómo interpretar la salida?

  • 29 / 55: número de línea donde se localizó la coincidencia (si se utiliza la opción -n).
  • inet: patrón de texto buscado que coincide con la línea analizada.
  • 192.168.1.50 / 127.0.0.1: direcciones IP devueltas como parte de la línea filtrada por el comando.

Errores habituales

  • Olvidar entrecomillar el patrón de búsqueda cuando este contiene espacios o caracteres especiales interpretados por la shell (como asteriscos o signos de dólar).
  • Confundir el comando grep con el comando find: recuerda que find busca ficheros o directorios por nombre y atributos, mientras que grep busca el contenido interno dentro de los archivos.

Conceptos relacionados

  • Expresiones regulares (Regex)
  • Flujo de datos (Streams)
  • Tuberías (Pipes)
  • Salida estándar (stdout)
  • Ficheros de registro (Logs)

Comandos relacionados

  • find
  • cat
  • less
  • tail
  • ps

Curiosidades

El comando grep es tan universal y eficiente en el ecosistema informático que su nombre se ha convertido en un verbo común en el argot técnico (por ejemplo, decir "grepear un archivo" significa buscar un texto específico dentro de él). Su variante moderna, rg (ripgrep), optimiza aún más estas búsquedas utilizando concurrencia en múltiples núcleos de CPU.


Prácticas propuestas

  1. Crea un archivo de texto de prueba con varias líneas diferentes y utiliza grep para aislar únicamente las líneas que contengan una palabra concreta.
  2. Ejecuta el comando grep -n para comprobar en qué número de línea exacta aparece un término específico dentro de un fichero de configuración de tu sistema (como /etc/hosts).
  3. Combina el comando ps aux con grep mediante una tubería (|) para comprobar si un servicio determinado se encuentra ejecutándose en segundo plano.
  4. Prueba a utilizar la opción -i buscando una palabra mezclando mayúsculas y minúsculas para comprobar cómo omite las diferencias tipográficas.
  5. Utiliza la opción recursiva -r para buscar un parámetro de texto dentro de una carpeta que contenga múltiples subdirectorios con archivos de código o apuntes.
  6. Si dispones de un entorno Windows, compara el uso de grep utilizando el comando nativo findstr desde la línea de comandos de CMD.

Consejo: Acostúmbrate a usar comillas alrededor de tus patrones de búsqueda en grep; te evitará errores extraños de sintaxis cuando busques frases completas o utilices caracteres especiales.