Uso básico
Ejecutar grep
grep "pattern" file.txt # buscar en archivo grep "error" *.log # buscar en múltiples archivos grep "hello" file1.txt file2.txt # lista explícita de archivos cat file.txt | grep "pattern" # entrada por tubería dmesg | grep -i "usb" # filtrar salida de comando
Flags comunes
-iBúsqueda sin distinguir mayúsculas
-vInvertir coincidencia — imprimir líneas que no coinciden
-cImprimir conteo de líneas coincidentes
-nMostrar números de línea
-lListar solo nombres de archivos con coincidencias
-LListar nombres de archivos sin coincidencias
-wCoincidir solo palabras completas
-xCoincidir solo líneas completas
Patrones regex
Expresiones regulares básicas (BRE)
.Cualquier carácter simple
*Cero o más del elemento anterior
^Inicio de línea
$Fin de línea
[abc]Clase de caracteres — cualquiera de a, b, c
[^abc]Clase negada — cualquier cosa excepto a, b, c
[a-z]Rango — letras minúsculas
\<, \>Límites de palabra (GNU)
\( \), \1Grupo de captura y referencia posterior
Ejemplos BRE
grep '^#' file.conf # líneas que empiezan con # grep 'error$' file.log # líneas que terminan en error grep '^$' file.txt # líneas en blanco grep 'col[ou]r' file.txt # coincidir color o colour
Regex extendida
Expresiones regulares extendidas (ERE)
+Uno o más del elemento anterior
?Cero o uno del elemento anterior
{n}Exactamente n repeticiones
{n,m}Entre n y m repeticiones
(a|b)Alternancia — coincidir a o b
( )Agrupación (sin barra invertida)
Ejemplos ERE
grep -E '[0-9]{3}-[0-9]{4}' f # patrón de número de teléfono grep -E '(error|warn|fatal)' f # múltiples patrones grep -E '^[A-Z][a-z]+' f # palabras en mayúscula grep -P '\d{1,3}\.\d{1,3}' f # regex Perl: fragmentos IP
Líneas de contexto
Ejemplos de contexto
grep -B 3 "error" app.log # 3 líneas antes de la coincidencia grep -A 5 "FAIL" test.log # 5 líneas después de la coincidencia grep -C 2 "crash" kern.log # 2 líneas antes y después grep --group-separator="---" -C 1 "err" f # separador personalizado
Flags de contexto
-B NMostrar N líneas antes de cada coincidencia
-A NMostrar N líneas después de cada coincidencia
-C NMostrar N líneas antes y después (contexto)
--group-separator=strSeparador entre grupos de coincidencias (por defecto --)
--color=autoResaltar coincidencias en el terminal
Búsqueda recursiva
Ejemplos recursivos
grep -r "TODO" . # recursivo desde directorio actual grep -rn "FIXME" src/ # recursivo con números de línea grep -r --include="*.py" "import" . # solo archivos .py grep -r --exclude="*.log" "error" . # omitir archivos .log grep -r --exclude-dir=node_modules "require" .
Flags recursivos
-r / --recursiveBuscar en directorios recursivamente
-RComo -r pero sigue enlaces simbólicos
--include=globBuscar solo archivos que coincidan con el glob
--exclude=globOmitir archivos que coincidan con el glob
--exclude-dir=dirOmitir directorios que coincidan con el nombre
--include-dir=dirBuscar solo en directorios que coincidan
Conteo y listado
Ejemplos de conteo y listado
grep -c "error" *.log # contar coincidencias por archivo grep -l "TODO" src/*.py # listar archivos con TODOs grep -L "test" src/*.py # archivos sin "test" grep -o "http[^ ]*" page.html # extraer solo las partes coincidentes grep -c '' file.txt # contar total de líneas (como wc -l)
Flags de salida
-cImprimir conteo de líneas coincidentes por archivo
-lImprimir solo nombres de archivos con coincidencias
-LImprimir solo nombres de archivos sin coincidencias
-oImprimir solo las partes coincidentes de las líneas
-H / -hMostrar / ocultar prefijo de nombre de archivo
-ZSalida delimitada por nulo (para xargs -0)
Coincidencia inversa
Invertir y excluir
grep -v "^#" config.conf # eliminar líneas de comentarios grep -v "^$" file.txt # eliminar líneas en blanco grep -v -e "debug" -e "trace" app.log # excluir dos patrones grep -v "pattern" f | grep "other" # cadena: NO A, luego B
Estrategias de filtrado
-vInvertir coincidencia — seleccionar líneas que no coinciden
-v with -eExcluir múltiples patrones
pipe chainEncadenar llamadas grep para filtrado complejo
grep -v '^$' | grep -v '^#'Eliminar líneas en blanco y comentarios
-v with -cContar líneas que no coinciden
Múltiples patrones
Ejemplos de múltiples patrones
grep -e "error" -e "warning" app.log grep -E "error|warning|fatal" app.log grep -f patterns.txt file.txt # patrones desde archivo grep -w -e "GET" -e "POST" access.log
Opciones de patrones
-e patternEspecificar un patrón (usar múltiples veces)
-f fileLeer patrones desde archivo (uno por línea)
-E 'a|b|c'Alternancia ERE para múltiples patrones
-FCadenas fijas — sin regex, coincidencia más rápida
-GRegex básica (modo por defecto)
-PRegex compatible con Perl (PCRE)
Rendimiento
Consejos de rendimiento
-F (fgrep)Modo de cadena fija — más rápido para cadenas literales
LC_ALL=C grepOmitir locale para 2-10x de velocidad en datos ASCII
--include/--excludeReducir archivos buscados antes de abrir
-m NDetener tras N coincidencias por archivo
-qModo silencioso — salir en la primera coincidencia (para scripts)
ripgrep (rg)Reemplazo directo; más rápido en repos grandes
Ejemplos de rendimiento
LC_ALL=C grep -F "exact string" huge.log grep -r -m 1 "needle" /var/log/ # detener tras el primer resultado grep -rq "pattern" . && echo "found" # prueba booleana grep -r --include="*.go" "func main" .
Patrones comunes
One-liners
grep -rn "TODO\|FIXME\|HACK" src/ # encontrar marcadores de código grep -oP '(?<=")[^"]+(?=")' f # extraer cadenas entre comillas grep -E '^\s*$' f | wc -l # contar líneas en blanco grep -c '' *.py | sort -t: -k2 -rn # ordenar archivos por número de líneas grep -rn --include="*.yaml" "password" . # auditar en busca de secretos
Recetas
Direcciones IPgrep -oE '[0-9]{1,3}(\.[0-9]{1,3}){3}'
Direcciones de emailgrep -oE '[a-zA-Z0-9._%+-]+@[a-z.-]+'
URLsgrep -oE 'https?://[^ ]+'
Líneas entre marcadoresgrep -A999 'START' f | grep -B999 'END'
Coincidencias únicasgrep -oE 'pattern' f | sort -u
Contar por patróngrep -c 'pat1' f; grep -c 'pat2' f