Ferramenta de pesquisa recursiva extremamente rapida que combina a usabilidade do ag com a velocidade do grep. Respeita as regras .gitignore por padrao.
| 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 | Descricao |
|---|
rg "pattern" | Pesquisar recursivamente no diretorio atual |
rg "pattern" path/ | Pesquisar num diretorio especifico |
rg "pattern" file.txt | Pesquisar 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) |
| Comando | Descricao |
|---|
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.txt | Ler padroes de ficheiro |
| Comando | Descricao |
|---|
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 -R | Forcar 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 |
| Comando | Descricao |
|---|
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-list | Mostrar todos os tipos de ficheiro conhecidos |
rg --type-add 'web:*.{html,css,js}' | Definir tipo de ficheiro personalizado |
| Comando | Descricao |
|---|
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 --files | Listar todos os ficheiros que o rg pesquisaria |
rg --files -t rust | Listar todos os ficheiros Rust |
| Comando | Descricao |
|---|
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" --passthru | Mostrar ficheiro completo com substituicoes |
rg -l "oldFunc" | xargs sed -i 's/oldFunc/newFunc/g' | Substituir efetivamente nos ficheiros (com sed) |
| Ficheiro/Variavel | Descricao |
|---|
~/.ripgreprc | Ficheiro de configuracao padrao |
RIPGREP_CONFIG_PATH | Caminho personalizado do ficheiro de configuracao |
--no-config | Ignorar 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'
| Ferramenta | Velocidade | .gitignore | Unicode | Regex |
|---|
| ripgrep | Mais rapido | Sim | Completo | Rust regex + PCRE2 |
| grep -r | Lento | Nao | Parcial | POSIX/extended |
| ag (Silver Searcher) | Rapido | Sim | Completo | PCRE |
| ack | Moderado | Nao | Completo | Perl |
- 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
| Problema | Solucao |
|---|
| Resultados em falta em repositorio git | Ficheiros podem estar no .gitignore — use rg -u ou --no-ignore |
| Ficheiro binario ignorado | Use rg -uuu ou --text para incluir ficheiros binarios |
| Regex nao corresponde | Tente -P para motor PCRE2, ou -F para strings literais |
Sem resultados com \b | Motor padrao pode nao suportar — tente rg -P "\bword\b" |
| Cores em falta no pipe | Use --color always ao encaminhar para less ou outras ferramentas |
| Configuracao nao carrega | Verifique RIPGREP_CONFIG_PATH ou use --no-config para depurar |
| Links simbolicos nao seguidos | Adicione a flag -L ou --follow |
| Resultados com muito ruido | Use globs -g '!pattern' ou -t type para restringir o ambito |
| Pesquisa muito lenta | Use --max-filesize, reduza profundidade com --max-depth, ou filtre tipos |