Skip to main content
Back to blog
· 3 min read

Grep: buscar patrones en archivos desde la terminal

Referencia práctica del comando grep en Linux: búsqueda por expresiones regulares, flags esenciales, combinaciones con pipes y patrones de uso frecuente.

linux terminal sre

grep (Global Regular Expression Print) es una utilidad de línea de comandos que busca líneas que coincidan con un patrón dentro de archivos de texto. Es una de las herramientas fundamentales del ecosistema Unix/Linux y se utiliza a diario para filtrar logs, buscar código y procesar salidas de otros comandos.

Uso básico

grep "<patrón>" <archivo>

Busca todas las líneas que contengan el patrón especificado dentro del archivo y las imprime en la salida estándar:

grep "error" /var/log/syslog

Búsqueda recursiva

El flag -r permite buscar dentro de todos los archivos de un directorio y sus subdirectorios:

grep -r "TODO" ./src

Flags esenciales

FlagDescripción
-iIgnora mayúsculas y minúsculas
-nMuestra el número de línea de cada coincidencia
-rBúsqueda recursiva en directorios
-vInvierte la búsqueda (líneas que NO coinciden)
-cMuestra solo el conteo de coincidencias por archivo
-lMuestra solo los nombres de archivos con coincidencias
-wBusca la palabra completa (no subcadenas)
-EUsa expresiones regulares extendidas (ERE)
-A nMuestra n líneas después de la coincidencia
-B nMuestra n líneas antes de la coincidencia
-C nMuestra n líneas de contexto (antes y después)
--colorResalta las coincidencias en color

Expresiones regulares básicas

Por defecto, grep interpreta patrones como expresiones regulares básicas (BRE):

MetacarácterSignificadoEjemplo
.Cualquier caráctergrep "e.o" archivo.txt
^Inicio de líneagrep "^FROM" Dockerfile
$Fin de líneagrep ";$" main.c
*Cero o más repeticiones del anteriorgrep "go*gle" archivo.txt
[]Conjunto de caracteresgrep "[0-9]" config.yml
\Escapa un metacaráctergrep "valor\.total" datos.csv

Expresiones regulares extendidas

Con el flag -E (equivalente al comando egrep), grep soporta metacaracteres adicionales sin necesidad de escaparlos:

MetacarácterSignificadoEjemplo
+Una o más repeticiones del anteriorgrep -E "go+gle" archivo.txt
?Cero o una repetición del anteriorgrep -E "colou?r" archivo.txt
|Alternancia (OR)grep -E "error|warning" /var/log/syslog
()Agrupacióngrep -E "(foo|bar)baz" archivo.txt

Combinaciones con pipes

grep se integra con el operador pipe (|) para filtrar la salida de otros comandos:

ps aux | grep nginx
cat /var/log/syslog | grep -i error
history | grep ssh
dmesg | grep -i usb

Excluir archivos y directorios

En búsquedas recursivas, es útil ignorar directorios y archivos irrelevantes:

grep -r "TODO" ./src --exclude-dir={node_modules,.git,dist} --exclude="*.min.js"

El flag --include limita la búsqueda a tipos de archivo específicos:

grep -r "import" ./src --include="*.ts"

Alternativas modernas

ripgrep (rg) es una alternativa a grep escrita en Rust. Ignora archivos de .gitignore por defecto, soporta búsqueda recursiva sin flags adicionales y es significativamente más rápido en codebases grandes.

# Instalación en Debian/Ubuntu
sudo apt install ripgrep

Buenas prácticas

  • Cita patrones entre comillas dobles — evita que el shell interprete caracteres especiales antes de pasarlos a grep.
  • Usa -r con --exclude-dir — ignora directorios irrelevantes como node_modules, .git o dist.
  • Prefiere -E sobre escapar metacaracteres — las expresiones regulares extendidas son más legibles.
  • Considera ripgrep para codebases grandes — mejor rendimiento y configuración por defecto más práctica.
  • Usa --color para facilitar la lectura — resalta visualmente las coincidencias en la terminal.
  • Combina flags para búsquedas precisas — por ejemplo, grep -rin "patrón" ./src combina recursividad, insensibilidad a mayúsculas y números de línea.