Ir al contenido

Comandos de ripgrep (rg)

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.

PlataformaComando
macOS (Homebrew)brew install ripgrep
Ubuntu/Debiansudo apt install ripgrep
Arch Linuxsudo pacman -S ripgrep
Fedorasudo dnf install ripgrep
Windows (Scoop)scoop install ripgrep
Windows (Choco)choco install ripgrep
Cargo (Rust)cargo install ripgrep
Verificarrg --version
ComandoDescripción
rg "pattern"Buscar recursivamente en el directorio actual
rg "pattern" path/Buscar en un directorio específico
rg "pattern" file.txtBuscar 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)
ComandoDescripció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.txtLeer patrones desde archivo
ComandoDescripció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 -RForzar 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
ComandoDescripció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-listMostrar todos los tipos de archivo conocidos
rg --type-add 'web:*.{html,css,js}'Definir tipo de archivo personalizado
ComandoDescripció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 --filesListar todos los archivos que rg buscaría
rg --files -t rustListar todos los archivos Rust
ComandoDescripció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" --passthruMostrar archivo completo con reemplazos
rg -l "oldFunc" | xargs sed -i 's/oldFunc/newFunc/g'Reemplazar realmente en archivos (con sed)
Archivo/VariableDescripción
~/.ripgreprcArchivo de configuración predeterminado
RIPGREP_CONFIG_PATHRuta personalizada del archivo de configuración
--no-configIgnorar 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 código muerto e imports no utilizados

Sección titulada «Encontrar código muerto e imports no utilizados»
# 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'
HerramientaVelocidad.gitignoreUnicodeRegex
ripgrepLa más rápidaSiCompletoRust regex + PCRE2
grep -rLentaNoParcialPOSIX/extendido
ag (Silver Searcher)RápidaSiCompletoPCRE
ackModeradaNoCompletoPerl
  • 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
ProblemaSolución
Resultados faltantes en repositorio gitLos archivos pueden estar en .gitignore — usa rg -u o --no-ignore
Archivo binario omitidoUsa rg -uuu o --text para incluir archivos binarios
Regex no coincidePrueba -P para el motor PCRE2, o -F para cadenas literales
Sin resultados con \bEl motor predeterminado puede no soportarlo — prueba rg -P "\bword\b"
Colores ausentes al redirigirUsa --color always al redirigir a less u otras herramientas
La configuración no cargaVerifica RIPGREP_CONFIG_PATH o usa --no-config para depurar
Enlaces simbólicos no seguidosAgrega el flag -L o --follow
Resultados con mucho ruidoUsa globs -g '!pattern' o -t type para reducir el alcance
Búsqueda demasiado lentaUsa --max-filesize, reduce profundidad con --max-depth, o filtra tipos