Pular para o conteúdo

Comandos ripgrep (rg)

Ferramenta de pesquisa recursiva extremamente rapida que combina a usabilidade do ag com a velocidade do grep. Respeita as regras .gitignore por padrao.

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
ComandoDescricao
rg "pattern"Pesquisar recursivamente no diretorio atual
rg "pattern" path/Pesquisar num diretorio especifico
rg "pattern" file.txtPesquisar num ficheiro especifico
rg -i "pattern"Pesquisa sem distincao de maiusculas/minusculas
rg -S "pattern"Caso inteligente (insensivel se tudo minusculo)
rg -w "word"Corresponder apenas palavras inteiras
rg -c "pattern"Contar correspondencias por ficheiro
rg -l "pattern"Listar apenas ficheiros com correspondencias
rg --files-without-match "pattern"Listar ficheiros sem correspondencias
rg -n "pattern"Mostrar numeros de linha (padrao)
rg -N "pattern"Ocultar numeros de linha
rg --column "pattern"Mostrar numeros de coluna das correspondencias
rg -F "literal.string"Pesquisa de string literal (sem regex)
ComandoDescricao
rg "foo|bar"Corresponder foo OU bar
rg "^import"Linhas que comecam com “import”
rg ";\s*$"Linhas que terminam com ponto e virgula
rg "\d{3}-\d{4}"Corresponder padrao de numero de telefone
rg "\bfunction\b"Correspondencia com limite de palavra
rg "fn\s+\w+"Corresponder definicoes de funcoes
rg -P "(?<=@)\w+"PCRE2 lookbehind (extrair dominio)
rg -P "\b\w{20,}\b"Palavras com 20+ caracteres
rg -U "struct \{[\s\S]*?\}"Correspondencia multilinha
rg -e "pat1" -e "pat2"Multiplos padroes (logica OU)
rg -f patterns.txtLer padroes de ficheiro
ComandoDescricao
rg -A 3 "pattern"Mostrar 3 linhas apos a correspondencia
rg -B 2 "pattern"Mostrar 2 linhas antes da correspondencia
rg -C 5 "pattern"Mostrar 5 linhas de contexto (antes + depois)
rg -o "pattern"Imprimir apenas o texto correspondido
rg --json "pattern"Saida em formato JSON
rg --vimgrep "pattern"Saida em formato compativel com Vim
rg --color never "pattern"Desativar saida colorida
rg --color always "pattern" | less -RForcar cor para encaminhamento
rg --heading "pattern"Agrupar resultados por ficheiro (padrao no terminal)
rg --no-heading "pattern"Resultados em linha unica sem agrupamento
rg --trim "pattern"Remover espacos em branco dos resultados
rg -m 5 "pattern"Limitar a 5 correspondencias por ficheiro
rg --max-count 1 "pattern"Apenas primeira correspondencia por ficheiro
rg --stats "pattern"Mostrar estatisticas de pesquisa no final
rg --passthru "pattern"Mostrar todas as linhas, destacando correspondencias
ComandoDescricao
rg -t py "pattern"Pesquisar apenas ficheiros Python
rg -t js -t ts "pattern"Pesquisar ficheiros JavaScript e TypeScript
rg -T html "pattern"Excluir ficheiros HTML
rg -g "*.md" "pattern"Filtro glob — apenas ficheiros markdown
rg -g "!*.min.js" "pattern"Exclusao glob — ignorar JS minificado
rg -g "src/**/*.ts" "pattern"Glob com caminho de diretorio
rg -g "!test/" "pattern"Excluir diretorio de testes
rg --type-listMostrar todos os tipos de ficheiro conhecidos
rg --type-add 'web:*.{html,css,js}'Definir tipo de ficheiro personalizado
ComandoDescricao
rg --hidden "pattern"Incluir ficheiros/diretorios ocultos
rg --no-ignore "pattern"Nao respeitar regras .gitignore
rg --no-ignore-vcs "pattern"Ignorar apenas ficheiros de ignore VCS
rg -u "pattern"Sem restricoes (—no-ignore)
rg -uu "pattern"Mais sem restricoes (—no-ignore —hidden)
rg -uuu "pattern"Maximo sem restricoes (+ ficheiros binarios)
rg --max-depth 2 "pattern"Limitar profundidade de diretorio
rg -L "pattern"Seguir links simbolicos
rg --max-filesize 1M "pattern"Ignorar ficheiros maiores que 1MB
rg --sort path "pattern"Ordenar resultados por caminho do ficheiro
rg --sortr modified "pattern"Ordenar por data de modificacao (mais recente primeiro)
rg --filesListar todos os ficheiros que o rg pesquisaria
rg --files -t rustListar todos os ficheiros Rust
ComandoDescricao
rg "old" -r "new"Pre-visualizar substituicoes (apenas stdout)
rg "(\w+)@(\w+)" -r '$1 at $2'Substituicao com grupo de captura regex
rg "TODO" -r "DONE" --passthruMostrar ficheiro completo com substituicoes
rg -l "oldFunc" | xargs sed -i 's/oldFunc/newFunc/g'Substituir efetivamente nos ficheiros (com sed)
Ficheiro/VariavelDescricao
~/.ripgreprcFicheiro de configuracao padrao
RIPGREP_CONFIG_PATHCaminho personalizado do ficheiro de configuracao
--no-configIgnorar ficheiro de configuracao
--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 os TODOs com contexto
rg "TODO|FIXME|HACK|XXX" -t py -C 2

# Contar TODOs por ficheiro
rg -c "TODO" --sort path
# Pre-visualizar alteracoes
rg "oldFunction" -r "newFunction" -t js

# Aplicar alteracoes (encaminhar para sed)
rg -l "oldFunction" -t js | xargs sed -i 's/oldFunction/newFunction/g'
# Encontrar ficheiros que nao contem um padrao
rg --files-without-match "Copyright" -t py

# Encontrar exports nao utilizados
rg "export " -t ts -l | while read f; do
  rg -l "$(basename $f .ts)" -g "!$f" || echo "Unused: $f"
done
# Pesquisar logs comprimidos
rg -z "ERROR" /var/log/*.gz

# Extrair timestamps de erros
rg -o "\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.*ERROR.*" app.log

# Contar erros por dia
rg -o "^\d{4}-\d{2}-\d{2}" --no-filename error.log | sort | uniq -c
# Selecao interativa de ficheiros com fzf
rg --files | fzf --preview 'rg --color=always "pattern" {}'

# Encaminhar resultados para vim
rg --vimgrep "pattern" | vim -q /dev/stdin

# Pipeline JSON com jq
rg --json "pattern" | jq 'select(.type == "match") | .data.lines.text'
FerramentaVelocidade.gitignoreUnicodeRegex
ripgrepMais rapidoSimCompletoRust regex + PCRE2
grep -rLentoNaoParcialPOSIX/extended
ag (Silver Searcher)RapidoSimCompletoPCRE
ackModeradoNaoCompletoPerl
  • Use filtros de tipo de ficheiro (-t, -T) em vez de globs quando possivel — sao mais rapidos e cobrem todas as extensoes
  • Crie um .ripgreprc para definir caso inteligente, agrupamento e exclusoes de diretorio como padrao
  • Use ficheiros .ignore nas raizes de projetos para excluir node_modules, dist, build sem afetar o git
  • Prefira -F para strings literais que contem metacaracteres regex para evitar escape
  • Use --stats para entender o desempenho de pesquisa em bases de codigo grandes
  • Combine com fzf ou xargs para selecao interativa e operacoes em lote
  • Use --files primeiro para verificar quais ficheiros serao pesquisados antes de executar a pesquisa real
  • Use modo multilinha (-U) com moderacao — e mais lento; prefira multiplas pesquisas quando possivel
ProblemaSolucao
Resultados em falta em repositorio gitFicheiros podem estar no .gitignore — use rg -u ou --no-ignore
Ficheiro binario ignoradoUse rg -uuu ou --text para incluir ficheiros binarios
Regex nao correspondeTente -P para motor PCRE2, ou -F para strings literais
Sem resultados com \bMotor padrao pode nao suportar — tente rg -P "\bword\b"
Cores em falta no pipeUse --color always ao encaminhar para less ou outras ferramentas
Configuracao nao carregaVerifique RIPGREP_CONFIG_PATH ou use --no-config para depurar
Links simbolicos nao seguidosAdicione a flag -L ou --follow
Resultados com muito ruidoUse globs -g '!pattern' ou -t type para restringir o ambito
Pesquisa muito lentaUse --max-filesize, reduza profundidade com --max-depth, ou filtre tipos