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
grepcon el comandofind: recuerda quefindbusca ficheros o directorios por nombre y atributos, mientras quegrepbusca 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
findcatlesstailps
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
- Crea un archivo de texto de prueba con varias líneas diferentes y utiliza
greppara aislar únicamente las líneas que contengan una palabra concreta. - Ejecuta el comando
grep -npara 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). - Combina el comando
ps auxcongrepmediante una tubería (|) para comprobar si un servicio determinado se encuentra ejecutándose en segundo plano. - Prueba a utilizar la opción
-ibuscando una palabra mezclando mayúsculas y minúsculas para comprobar cómo omite las diferencias tipográficas. - Utiliza la opción recursiva
-rpara buscar un parámetro de texto dentro de una carpeta que contenga múltiples subdirectorios con archivos de código o apuntes. - Si dispones de un entorno Windows, compara el uso de
greputilizando el comando nativofindstrdesde 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.