Contenido
grep sirve para filtrar texto y mostrar solo las líneas que coinciden con un patrón.
Por ejemplo, permite:
- buscar una palabra dentro de un archivo
- localizar errores en logs
- encontrar líneas que contengan una IP, usuario o ruta
- buscar texto ignorando mayúsculas
- contar coincidencias
- mostrar números de línea
- buscar en varios archivos a la vez
- combinarse con otros comandos mediante tuberías (
|)
Sintaxis básica
grep [opciones] "patrón" archivo
Estructura
- opciones: modifican el comportamiento del comando
- patrón: texto o expresión que queremos buscar
- archivo: fichero o ficheros donde se realizará la búsqueda
Primer ejemplo
Supongamos que tenemos un archivo llamado notas.txt.
Ana
Pedro
Lucía
Pedro García
María
Si ejecutamos:
grep "Pedro" notas.txt
El resultado será:
Pedro
Pedro García
Porque grep muestra las líneas donde aparece la palabra Pedro.
Búsqueda básica en archivos
Buscar una palabra en un archivo
grep "error" sistema.log
Muestra todas las líneas del archivo sistema.log que contienen la palabra error.
Buscar en varios archivos a la vez
grep "usuario" archivo1.txt archivo2.txt archivo3.txt
Busca la palabra usuario en varios archivos.
Ignorar mayúsculas y minúsculas
Opción -i
Permite buscar sin diferenciar entre mayúsculas y minúsculas.
grep -i "ubuntu" documento.txt
Esto encontraría:
ubuntuUbuntuUBUNTU
Muy útil cuando no sabemos cómo está escrito exactamente el texto.
Mostrar números de línea
Opción -n
Muestra el número de línea donde aparece la coincidencia.
grep -n "error" sistema.log
Ejemplo de salida:
15:error de conexión
28:error al iniciar servicio
Esto facilita localizar rápidamente la línea en el archivo.
Contar coincidencias
Opción -c
Cuenta cuántas líneas contienen el patrón.
grep -c "warning" sistema.log
Devuelve un número, por ejemplo:
7
Esto significa que hay 7 líneas con la palabra warning.
Mostrar solo nombres de archivos
Opción -l
Muestra solo los nombres de los archivos donde aparece el patrón.
grep -l "mysql" *.txt
En vez de mostrar las líneas, muestra qué archivos contienen esa palabra.
Opción -L
Hace lo contrario: muestra los archivos donde no aparece el patrón.
grep -L "mysql" *.txt
Buscar palabras exactas
Opción -w
Busca coincidencias de palabra completa.
grep -w "sol" texto.txt
Esto evita que aparezcan coincidencias como:
solitariosolución
y muestra solo la palabra sol como término independiente.
Invertir la búsqueda
Opción -v
Muestra las líneas que no coinciden con el patrón.
grep -v "admin" usuarios.txt
Muy útil para excluir líneas.
Buscar recursivamente en carpetas
Opción -r
Busca dentro de todos los archivos de un directorio y sus subdirectorios.
grep -r "localhost" /etc
Busca la palabra localhost en todos los archivos dentro de /etc.
Opción -rn
Muy usada para búsqueda recursiva con número de línea.
grep -rn "puerto" /etc
Mostrar coincidencias exactas dentro de una línea
Opción -o
Muestra solo la parte de la línea que coincide.
grep -o "error" sistema.log
Si una línea tiene varias veces la palabra error, puede mostrar cada coincidencia por separado.
Expresiones regulares básicas
grep puede trabajar con patrones más avanzados mediante expresiones regulares.
Buscar líneas que empiecen por una palabra
grep "^root" usuarios.txt
El símbolo ^ indica inicio de línea.
Buscar líneas que terminen con una palabra
grep "bash$" usuarios.txt
El símbolo $ indica final de línea.
Buscar líneas que contengan números
grep "[0-9]" datos.txt
Esto busca cualquier línea que contenga al menos un dígito.
Buscar vocales
grep "[aeiou]" texto.txt
Buscar letras mayúsculas
grep "[A-Z]" texto.txt
Aquí empieza la magia útil. Con moderación, porque las expresiones regulares también tienen fama de convertirse en jeroglíficos con malas pulgas.
Uso con tuberías
Una de las cosas más potentes de grep es usarlo junto con otros comandos.
Buscar un proceso en ejecución
ps aux | grep apache
Muestra las líneas del listado de procesos donde aparece apache.
Buscar un servicio activo
systemctl list-units | grep ssh
Filtrar resultados de un listado
ls -l | grep ".txt"
Aquí grep filtra la salida de otro comando.
Buscar en logs
grep se usa muchísimo para revisar logs.
Buscar errores en un archivo de log
grep -i "error" /var/log/syslog
Buscar intentos fallidos
grep -i "failed" /var/log/auth.log
Buscar accesos SSH
grep "sshd" /var/log/auth.log
Esto es especialmente útil en administración y ciberseguridad.
Usar grep con find
Una combinación muy habitual es usar find para localizar archivos y grep para buscar texto dentro de ellos.
Buscar la palabra “password” en archivos .conf
find /etc -name "*.conf" -exec grep -H "password" {} \;
Explicación
findlocaliza archivos.confgrepbusca la palabrapassword-Hhace que aparezca también el nombre del archivo
Mostrar nombre del archivo junto al resultado
Opción -H
grep -H "localhost" /etc/hosts
Si se buscan varios archivos, esto ayuda a saber de cuál sale cada coincidencia.
Ocultar nombre del archivo
Opción -h
grep -h "usuario" archivo1.txt archivo2.txt
Muestra solo las líneas encontradas, sin el nombre del archivo.
Buscar coincidencias exactas con expresiones ampliadas
Opción -E
Activa expresiones regulares extendidas.
grep -E "error|failed|warning" sistema.log
Busca líneas que contengan cualquiera de esas palabras.
Muy útil porque evita tener que hacer búsquedas separadas.
Buscar coincidencias fijas sin interpretar regex
Opción -F
Busca texto literal, sin interpretar caracteres especiales como expresiones regulares.
grep -F "a+b" formulas.txt
Esto busca exactamente a+b.
Resaltar coincidencias
En muchas terminales, grep resalta las coincidencias automáticamente. También se puede forzar:
grep --color=auto "error" sistema.log
Esto mejora mucho la lectura.
Ejemplos
1. Buscar la palabra linux en un archivo
grep "linux" apuntes.txt
2. Buscar la palabra linux ignorando mayúsculas
grep -i "linux" apuntes.txt
3. Mostrar las líneas donde aparece admin con su número
grep -n "admin" usuarios.txt
4. Contar cuántas líneas contienen error
grep -c "error" sistema.log
5. Mostrar líneas que no contienen root
grep -v "root" usuarios.txt
6. Buscar recursivamente la palabra puerto en una carpeta
grep -r "puerto" /etc
7. Buscar varias palabras con una sola orden
grep -E "error|warning|failed" sistema.log
8. Buscar procesos relacionados con mysql
ps aux | grep mysql
Buenas prácticas al usar grep
1. Usar comillas en el patrón
Correcto:
grep "error de red" log.txt
Esto evita que el shell haga cosas raras con espacios o caracteres especiales.
2. Usar -i cuando no importe cómo está escrito
Si buscas nombres, usuarios o palabras que pueden ir en mayúsculas o minúsculas, ahorra disgustos.
3. Usar -n para localizar mejor
Muy recomendable cuando luego se va a editar el archivo.
4. Probar primero búsquedas simples
Antes de montar una expresión regular digna de un grimorio arcano, comprueba que el texto base aparece.
5. Tener cuidado con búsquedas recursivas en rutas grandes
Buscar en / o en directorios enormes puede tardar bastante y generar mucho ruido.
Errores comunes
Error 1: pensar que grep busca archivos por nombre
No.grep busca texto dentro de archivos o dentro de la salida de comandos.
Para buscar archivos por nombre se usa find.
Error 2: olvidar las comillas
grep error de red log.txt
Esto no se interpreta como una sola búsqueda, sino como varios argumentos.
Lo correcto sería:
grep "error de red" log.txt
Error 3: confundir coincidencia parcial con palabra exacta
grep "sol" texto.txt
Puede encontrar:
solsoluciónsolitario
Si queremos solo la palabra completa:
grep -w "sol" texto.txt
Error 4: usar expresiones regulares sin darse cuenta
Caracteres como ., *, ^, $, [ ] tienen significado especial.
Si quieres buscar texto literal con símbolos, a veces conviene usar -F.
Opciones principales de grep
| Opción | Significado | Ejemplo |
|---|---|---|
-i | Ignora mayúsculas y minúsculas | grep -i "ubuntu" archivo.txt |
-n | Muestra número de línea | grep -n "error" log.txt |
-c | Cuenta líneas coincidentes | grep -c "warning" log.txt |
-l | Muestra solo nombres de archivos con coincidencia | grep -l "mysql" *.txt |
-L | Muestra archivos sin coincidencia | grep -L "mysql" *.txt |
-w | Busca palabra exacta | grep -w "sol" texto.txt |
-v | Invierte la búsqueda | grep -v "admin" usuarios.txt |
-r | Busca recursivamente en carpetas | grep -r "localhost" /etc |
-rn | Recursivo con número de línea | grep -rn "puerto" /etc |
-o | Muestra solo la coincidencia | grep -o "error" log.txt |
-H | Muestra nombre del archivo | grep -H "root" archivo.txt |
-h | Oculta nombre del archivo | grep -h "root" archivo1.txt archivo2.txt |
-E | Usa expresiones regulares extendidas | `grep -E «error |
-F | Busca texto literal | grep -F "a+b" archivo.txt |
--color=auto | Resalta coincidencias | grep --color=auto "error" log.txt |
Diferencia entre grep y find
Esto conviene dejarlo muy claro a los alumnos, porque se confunden muchísimo al principio.
| Comando | ¿Qué busca? | Ejemplo |
|---|---|---|
find | Archivos y directorios por nombre, tipo, tamaño, fecha, etc. | find /home -name "*.txt" |
grep | Texto dentro de archivos o salida de comandos | grep "error" log.txt |
Ejemplo práctico
findresponde a: “¿Dónde están los archivos.txt?”grepresponde a: “¿Qué archivos contienen la palabraerror?”
Uno busca cosas.
El otro busca texto dentro de las cosas.
Cada uno hace su hechicería.
Ejercicios
Ejercicio 1
Busca la palabra linux dentro de un archivo llamado apuntes.txt.
Ejercicio 2
Busca la palabra ubuntu ignorando mayúsculas y minúsculas.
Ejercicio 3
Muestra en qué líneas aparece la palabra admin dentro de usuarios.txt.
Ejercicio 4
Cuenta cuántas líneas contienen la palabra error en sistema.log.
Ejercicio 5
Muestra todas las líneas que no contienen la palabra root.
Ejercicio 6
Busca recursivamente la palabra servidor dentro de la carpeta /etc.
Ejercicio 7
Busca cualquiera de estas palabras en sistema.log: error, warning o failed.
Ejercicio 8
Muestra los procesos en ejecución relacionados con ssh.
Soluciones de los ejercicios
Ejercicio 1
Enunciado: Busca la palabra linux dentro de un archivo llamado apuntes.txt.
grep "linux" apuntes.txt
Busca las líneas del archivo apuntes.txt que contienen la palabra linux.
Ejercicio 2
Enunciado: Busca la palabra ubuntu ignorando mayúsculas y minúsculas.
grep -i "ubuntu" apuntes.txt
La opción -i permite encontrar ubuntu, Ubuntu, UBUNTU, etc.
Ejercicio 3
Enunciado: Muestra en qué líneas aparece la palabra admin dentro de usuarios.txt.
grep -n "admin" usuarios.txt
La opción -n añade el número de línea a cada coincidencia.
Ejercicio 4
Enunciado: Cuenta cuántas líneas contienen la palabra error en sistema.log.
grep -c "error" sistema.log
La opción -c cuenta el número de líneas coincidentes.
Ejercicio 5
Enunciado: Muestra todas las líneas que no contienen la palabra root.
grep -v "root" usuarios.txt
La opción -v invierte la búsqueda y muestra las líneas que no contienen ese patrón.
Ejercicio 6
Enunciado: Busca recursivamente la palabra servidor dentro de la carpeta /etc.
grep -r "servidor" /etc
La opción -r busca en todos los archivos dentro del directorio y sus subdirectorios.
Ejercicio 7
Enunciado: Busca cualquiera de estas palabras en sistema.log: error, warning o failed.
grep -E "error|warning|failed" sistema.log
La opción -E permite usar expresiones regulares extendidas y el operador | significa “o”.
Ejercicio 8
Enunciado: Muestra los procesos en ejecución relacionados con ssh.
ps aux | grep ssh
ps aux lista los procesos y grep ssh filtra los que contienen ssh.








