REFERENCIA RÁPIDA DE GREP
Coincidencia de patrones, regex, búsqueda recursiva, contexto, filtrado
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
| -i | Búsqueda sin distinguir mayúsculas |
| -v | Invertir coincidencia — imprimir líneas que no coinciden |
| -c | Imprimir conteo de líneas coincidentes |
| -n | Mostrar números de línea |
| -l | Listar solo nombres de archivos con coincidencias |
| -L | Listar nombres de archivos sin coincidencias |
| -w | Coincidir solo palabras completas |
| -x | Coincidir 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) |
| \( \), \1 | Grupo 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 N | Mostrar N líneas antes de cada coincidencia |
| -A N | Mostrar N líneas después de cada coincidencia |
| -C N | Mostrar N líneas antes y después (contexto) |
| --group-separator=str | Separador entre grupos de coincidencias (por defecto --) |
| --color=auto | Resaltar 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 / --recursive | Buscar en directorios recursivamente |
| -R | Como -r pero sigue enlaces simbólicos |
| --include=glob | Buscar solo archivos que coincidan con el glob |
| --exclude=glob | Omitir archivos que coincidan con el glob |
| --exclude-dir=dir | Omitir directorios que coincidan con el nombre |
| --include-dir=dir | Buscar 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
| -c | Imprimir conteo de líneas coincidentes por archivo |
| -l | Imprimir solo nombres de archivos con coincidencias |
| -L | Imprimir solo nombres de archivos sin coincidencias |
| -o | Imprimir solo las partes coincidentes de las líneas |
| -H / -h | Mostrar / ocultar prefijo de nombre de archivo |
| -Z | Salida 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
| -v | Invertir coincidencia — seleccionar líneas que no coinciden |
| -v with -e | Excluir múltiples patrones |
| pipe chain | Encadenar llamadas grep para filtrado complejo |
| grep -v '^$' | grep -v '^#' | Eliminar líneas en blanco y comentarios |
| -v with -c | Contar 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 pattern | Especificar un patrón (usar múltiples veces) |
| -f file | Leer patrones desde archivo (uno por línea) |
| -E 'a|b|c' | Alternancia ERE para múltiples patrones |
| -F | Cadenas fijas — sin regex, coincidencia más rápida |
| -G | Regex básica (modo por defecto) |
| -P | Regex compatible con Perl (PCRE) |
Rendimiento
Consejos de rendimiento
| -F (fgrep) | Modo de cadena fija — más rápido para cadenas literales |
| LC_ALL=C grep | Omitir locale para 2-10x de velocidad en datos ASCII |
| --include/--exclude | Reducir archivos buscados antes de abrir |
| -m N | Detener tras N coincidencias por archivo |
| -q | Modo 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 IP | grep -oE '[0-9]{1,3}(\.[0-9]{1,3}){3}' |
| Direcciones de email | grep -oE '[a-zA-Z0-9._%+-]+@[a-z.-]+' |
| URLs | grep -oE 'https?://[^ ]+' |
| Líneas entre marcadores | grep -A999 'START' f | grep -B999 'END' |
| Coincidencias únicas | grep -oE 'pattern' f | sort -u |
| Contar por patrón | grep -c 'pat1' f; grep -c 'pat2' f |