1.6 – Comando grep en Ubuntu

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:

  • ubuntu
  • Ubuntu
  • UBUNTU

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:

  • solitario
  • solució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

  • find localiza archivos .conf
  • grep busca la palabra password
  • -H hace 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:

  • sol
  • solución
  • solitario

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ónSignificadoEjemplo
-iIgnora mayúsculas y minúsculasgrep -i "ubuntu" archivo.txt
-nMuestra número de líneagrep -n "error" log.txt
-cCuenta líneas coincidentesgrep -c "warning" log.txt
-lMuestra solo nombres de archivos con coincidenciagrep -l "mysql" *.txt
-LMuestra archivos sin coincidenciagrep -L "mysql" *.txt
-wBusca palabra exactagrep -w "sol" texto.txt
-vInvierte la búsquedagrep -v "admin" usuarios.txt
-rBusca recursivamente en carpetasgrep -r "localhost" /etc
-rnRecursivo con número de líneagrep -rn "puerto" /etc
-oMuestra solo la coincidenciagrep -o "error" log.txt
-HMuestra nombre del archivogrep -H "root" archivo.txt
-hOculta nombre del archivogrep -h "root" archivo1.txt archivo2.txt
-EUsa expresiones regulares extendidas`grep -E «error
-FBusca texto literalgrep -F "a+b" archivo.txt
--color=autoResalta coincidenciasgrep --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
findArchivos y directorios por nombre, tipo, tamaño, fecha, etc.find /home -name "*.txt"
grepTexto dentro de archivos o salida de comandosgrep "error" log.txt

Ejemplo práctico

  • find responde a: “¿Dónde están los archivos .txt?”
  • grep responde a: “¿Qué archivos contienen la palabra error?”

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.