28 out 2026 · linux, grep, ripgrep, terminal · 4 min
Quando vale trocar grep por ripgrep?
Vale trocar quando você busca em árvores grandes de código ou texto e quer desempenho, respeito a .gitignore e filtros por tipo sem montar pipeline. Em 20 mil arquivos de 2 KB, ripgrep terminou em 0,11 s contra 0,18 s do grep -r, e não listou o arquivo binário que continha o termo. grep continua certo para scripts portáveis e para máquinas onde você não pode instalar nada.
ripgrep é recursivo por padrão, respeita .gitignore quando está num repositório git, ignora arquivos binários e tem filtros por tipo (-t). grep faz o mesmo com flags: -r, –include, -I. A diferença é o padrão: rg já vem com o comportamento que você monta na mão no grep.
Comandos equivalentes
| O que você quer | grep | ripgrep |
|---|---|---|
| buscar recursivo | grep -r “termo” . | rg “termo” |
| só arquivos .py | grep -r –include=’*.py’ “termo” . | rg -t py “termo” |
| ignorar binários | grep -I | padrão do rg |
| listar arquivos com o termo | grep -rl “termo” . | rg -l “termo” |
| contar por arquivo | grep -c “termo” arquivo | rg -c “termo” |
| case-insensitive | grep -i | rg -i |
| regex estendida | grep -E | padrão do rg |
Medição na nossa máquina
Geramos 20.000 arquivos de texto de cerca de 2 KB, com o termo ABC-123 em 7.764 deles, mais um arquivo binário de 1 MB que também contém o termo. Rodamos uma vez cada, depois de aquecer o cache de página.
| Comando | Tempo | Arquivos com o termo | Binário listado? |
|---|---|---|---|
| grep -r “ABC-123” . | 0,18 s | 7.765 | sim |
| rg “ABC-123” . | 0,11 s | 7.764 | não |
Os dois acharam os mesmos 7.764 arquivos de texto. O grep listou o binário porque, por padrão, ele só imprime “Binary file matches” a menos que você use -I. O rg pulou o binário sozinho. A diferença de 0,07 s não justifica trocar por si só; o ganho aparece em árvores maiores e em repetição, quando o paralelismo e o cache do rg compensam.
Artefato: teste lado a lado
O script abaixo cria 200 arquivos, coloca o termo em 42 deles e cria um binário com o termo. Depois roda grep e, se ripgrep estiver instalado, rg. No final limpa o diretório temporário.
#!/usr/bin/env bash
set -euo pipefail
D="${TMPDIR:-/tmp}/rg-vs-grep-$$"
mkdir -p "$D"
trap 'rm -rf "$D"' EXIT
for i in $(seq 1 200); do
printf 'linha %d: nada aqui\n' "$i" > "$D/f$i.txt"
done
for i in $(seq 1 42); do
printf 'achado ABC-123 no arquivo %d\n' "$i" >> "$D/f$i.txt"
done
printf 'ABC-123\n' > "$D/blob.bin"
echo "== grep =="
grep -rl "ABC-123" "$D" | wc -l
echo "== ripgrep (se instalado) =="
if command -v rg >/dev/null 2>&1; then
rg -l "ABC-123" "$D" | wc -l
else
echo "rg nao instalado neste ambiente"
fi
Salve como rg-vs-grep.sh e rode com bash rg-vs-grep.sh.
Como verificar
O grep deve contar 43 (42 arquivos de texto mais o binário). Se ripgrep estiver instalado, ele deve contar 42, porque pula o binário. Se a contagem do rg for 43, ele está rodando com filtros desligados (-uuu) ou o binário parece texto.
Se der errado
rg: command not found: instale comapt install ripgrep(Debian/Ubuntu) ou baixe o binário. O script continua com o grep.- resultados diferentes: por padrão rg ignora arquivos listados em .gitignore e arquivos binários; use
rg -uuupara desligar todos os filtros e comparar com grep. - acentos errados: confira
locale;LC_ALL=Cmuda a semântica de classes de caracteres. - grep lento em árvore grande: use
--exclude-dire--includepara reduzir o escopo; ou troque por rg.
Quando escolher qual
| Situação | Escolha |
|---|---|
| script que roda em qualquer Linux | grep |
| busca diária em repositório git | rg |
| árvore com node_modules, .git, binários | rg |
| máquina sem instalação | grep |
| precisa substituir texto | nenhum dos dois (use sed ou sd) |
Se a busca vira rotina, vale combinar com outras ferramentas: Como consultar JSON no terminal com jq, Como deixar o terminal do Linux bonito e útil e Disco cheio: como achar o que está ocupando.
FAQ
ripgrep é sempre mais rápido? Em arquivo único pequeno a diferença é irrelevante. O ganho é em árvores grandes e buscas repetidas.
posso usar rg em scripts de CI? Sim, mas fixe a versão. grep é mais previsível em imagens mínimas.
rg substitui sed? Não. Ele busca. Para substituir, use sed ou sd.
como buscar arquivo oculto?
rg --hidden.
como desligar todos os filtros?
rg -uuu.
Fontes
- ripgrep no GitHub, consultado em 28 out 2026.
- ripgrep GUIDE, consultado em 28 out 2026.
- GNU grep manual, consultado em 28 out 2026.