Herramienta de búsqueda recursiva ultrarrápida que combina la usabilidad de ag con la velocidad de grep. Respeta las reglas de .gitignore por defecto.
| Plataforma | Comando |
|---|
| macOS (Homebrew) | brew install ripgrep |
| Ubuntu/Debian | sudo apt install ripgrep |
| Arch Linux | sudo pacman -S ripgrep |
| Fedora | sudo dnf install ripgrep |
| Windows (Scoop) | scoop install ripgrep |
| Windows (Choco) | choco install ripgrep |
| Cargo (Rust) | cargo install ripgrep |
| Verificar | rg --version |
| Comando | Descripción |
|---|
rg "pattern" | Buscar recursivamente en el directorio actual |
rg "pattern" path/ | Buscar en un directorio específico |
rg "pattern" file.txt | Buscar en un archivo específico |
rg -i "pattern" | Búsqueda sin distinción de mayúsculas/minúsculas |
rg -S "pattern" | Mayúsculas inteligentes (insensible si todo es minúsculas) |
rg -w "word" | Coincidir solo palabras completas |
rg -c "pattern" | Contar coincidencias por archivo |
rg -l "pattern" | Listar solo archivos con coincidencias |
rg --files-without-match "pattern" | Listar archivos sin coincidencias |
rg -n "pattern" | Mostrar números de línea (predeterminado) |
rg -N "pattern" | Ocultar números de línea |
rg --column "pattern" | Mostrar números de columna de las coincidencias |
rg -F "literal.string" | Búsqueda de cadena literal (sin regex) |
| Comando | Descripción |
|---|
rg "foo|bar" | Coincidir con foo O bar |
rg "^import" | Líneas que comienzan con “import” |
rg ";\s*$" | Líneas que terminan con punto y coma |
rg "\d{3}-\d{4}" | Coincidir patrón de número telefónico |
rg "\bfunction\b" | Coincidencia con límite de palabra |
rg "fn\s+\w+" | Coincidir definiciones de funciones |
rg -P "(?<=@)\w+" | Lookbehind PCRE2 (extraer dominio) |
rg -P "\b\w{20,}\b" | Palabras con 20+ caracteres |
rg -U "struct \{[\s\S]*?\}" | Coincidencia multilínea |
rg -e "pat1" -e "pat2" | Múltiples patrones (lógica OR) |
rg -f patterns.txt | Leer patrones desde archivo |
| Comando | Descripción |
|---|
rg -A 3 "pattern" | Mostrar 3 líneas después de la coincidencia |
rg -B 2 "pattern" | Mostrar 2 líneas antes de la coincidencia |
rg -C 5 "pattern" | Mostrar 5 líneas de contexto (antes + después) |
rg -o "pattern" | Imprimir solo el texto coincidente |
rg --json "pattern" | Salida en formato JSON |
rg --vimgrep "pattern" | Salida en formato compatible con Vim |
rg --color never "pattern" | Deshabilitar colores en la salida |
rg --color always "pattern" | less -R | Forzar color al redirigir |
rg --heading "pattern" | Agrupar resultados por archivo (predeterminado en terminal) |
rg --no-heading "pattern" | Resultados en una sola línea sin agrupación |
rg --trim "pattern" | Recortar espacios en blanco de los resultados |
rg -m 5 "pattern" | Limitar a 5 coincidencias por archivo |
rg --max-count 1 "pattern" | Solo la primera coincidencia por archivo |
rg --stats "pattern" | Mostrar estadísticas de búsqueda al final |
rg --passthru "pattern" | Mostrar todas las líneas, resaltando coincidencias |
| Comando | Descripción |
|---|
rg -t py "pattern" | Buscar solo en archivos Python |
rg -t js -t ts "pattern" | Buscar en archivos JavaScript y TypeScript |
rg -T html "pattern" | Excluir archivos HTML |
rg -g "*.md" "pattern" | Filtro glob — solo archivos markdown |
rg -g "!*.min.js" "pattern" | Exclusión glob — omitir JS minificado |
rg -g "src/**/*.ts" "pattern" | Glob con ruta de directorio |
rg -g "!test/" "pattern" | Excluir directorio de pruebas |
rg --type-list | Mostrar todos los tipos de archivo conocidos |
rg --type-add 'web:*.{html,css,js}' | Definir tipo de archivo personalizado |
| Comando | Descripción |
|---|
rg --hidden "pattern" | Incluir archivos/directorios ocultos |
rg --no-ignore "pattern" | No respetar reglas de .gitignore |
rg --no-ignore-vcs "pattern" | Omitir solo archivos de ignorar VCS |
rg -u "pattern" | Sin restricciones (—no-ignore) |
rg -uu "pattern" | Más sin restricciones (—no-ignore —hidden) |
rg -uuu "pattern" | Máximo sin restricciones (+ archivos binarios) |
rg --max-depth 2 "pattern" | Limitar profundidad de directorio |
rg -L "pattern" | Seguir enlaces simbólicos |
rg --max-filesize 1M "pattern" | Omitir archivos mayores a 1MB |
rg --sort path "pattern" | Ordenar resultados por ruta de archivo |
rg --sortr modified "pattern" | Ordenar por fecha de modificación (más reciente primero) |
rg --files | Listar todos los archivos que rg buscaría |
rg --files -t rust | Listar todos los archivos Rust |
| Comando | Descripción |
|---|
rg "old" -r "new" | Vista previa de reemplazos (solo stdout) |
rg "(\w+)@(\w+)" -r '$1 at $2' | Reemplazo con grupos de captura regex |
rg "TODO" -r "DONE" --passthru | Mostrar archivo completo con reemplazos |
rg -l "oldFunc" | xargs sed -i 's/oldFunc/newFunc/g' | Reemplazar realmente en archivos (con sed) |
| Archivo/Variable | Descripción |
|---|
~/.ripgreprc | Archivo de configuración predeterminado |
RIPGREP_CONFIG_PATH | Ruta personalizada del archivo de configuración |
--no-config | Ignorar archivo de configuración |
--smart-case
--line-number
--heading
--max-columns=200
--max-columns-preview
--glob=!node_modules/
--glob=!.git/
--glob=!dist/
--glob=!vendor/
--colors=match:fg:yellow
--colors=match:style:bold
--colors=path:fg:green
# Todos los TODOs con contexto
rg "TODO|FIXME|HACK|XXX" -t py -C 2
# Contar TODOs por archivo
rg -c "TODO" --sort path
# Vista previa de cambios
rg "oldFunction" -r "newFunction" -t js
# Aplicar cambios (redirigir a sed)
rg -l "oldFunction" -t js | xargs sed -i 's/oldFunction/newFunction/g'
# Encontrar archivos que no contienen un patrón
rg --files-without-match "Copyright" -t py
# Encontrar exports no utilizados
rg "export " -t ts -l | while read f; do
rg -l "$(basename $f .ts)" -g "!$f" || echo "Unused: $f"
done
# Buscar en registros comprimidos
rg -z "ERROR" /var/log/*.gz
# Extraer marcas de tiempo de errores
rg -o "\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.*ERROR.*" app.log
# Contar errores por día
rg -o "^\d{4}-\d{2}-\d{2}" --no-filename error.log | sort | uniq -c
# Selección interactiva de archivos con fzf
rg --files | fzf --preview 'rg --color=always "pattern" {}'
# Enviar resultados a vim
rg --vimgrep "pattern" | vim -q /dev/stdin
# Pipeline JSON con jq
rg --json "pattern" | jq 'select(.type == "match") | .data.lines.text'
| Herramienta | Velocidad | .gitignore | Unicode | Regex |
|---|
| ripgrep | La más rápida | Si | Completo | Rust regex + PCRE2 |
| grep -r | Lenta | No | Parcial | POSIX/extendido |
| ag (Silver Searcher) | Rápida | Si | Completo | PCRE |
| ack | Moderada | No | Completo | Perl |
- Usa filtros de tipo de archivo (
-t, -T) en lugar de globs cuando sea posible — son más rápidos y cubren todas las extensiones
- Crea un
.ripgreprc para establecer mayúsculas inteligentes, encabezados y exclusiones de directorios como valores predeterminados
- Usa archivos
.ignore en las raíces del proyecto para excluir node_modules, dist, build sin afectar git
- Prefiere
-F para cadenas literales que contienen metacaracteres regex para evitar el escape
- Usa
--stats para entender el rendimiento de búsqueda en bases de código grandes
- Combina con
fzf o xargs para selección interactiva y operaciones por lotes
- Usa
--files primero para verificar qué archivos se buscarán antes de ejecutar la búsqueda real
- Usa el modo multilínea (
-U) con moderación — es más lento; prefiere múltiples búsquedas cuando sea posible
| Problema | Solución |
|---|
| Resultados faltantes en repositorio git | Los archivos pueden estar en .gitignore — usa rg -u o --no-ignore |
| Archivo binario omitido | Usa rg -uuu o --text para incluir archivos binarios |
| Regex no coincide | Prueba -P para el motor PCRE2, o -F para cadenas literales |
Sin resultados con \b | El motor predeterminado puede no soportarlo — prueba rg -P "\bword\b" |
| Colores ausentes al redirigir | Usa --color always al redirigir a less u otras herramientas |
| La configuración no carga | Verifica RIPGREP_CONFIG_PATH o usa --no-config para depurar |
| Enlaces simbólicos no seguidos | Agrega el flag -L o --follow |
| Resultados con mucho ruido | Usa globs -g '!pattern' o -t type para reducir el alcance |
| Búsqueda demasiado lenta | Usa --max-filesize, reduce profundidad con --max-depth, o filtra tipos |