Busca & Regex
grep, ripgrep (rg), find, sed, e awk - o kit de ferramentas de busca de texto do Linux que desenvolvedores Python usam para buscar logs, localizar arquivos e transformar configurações "one-shot" em servidores.
Receita
rg "TaxCalculator" src/
rg -n "raise_for_status" --type py
find /var/log/myapp -name "*.log" -mtime +7
grep -E "ERROR|CRITICAL" /var/log/myapp/app.log | tail -50Quando usar isso:
- Encontrar definição de símbolo em um monorepositório Python
- Buscar logs de produção por ID de rastreamento
- Localizar arquivos grandes ou antigos antes da limpeza
- Extração rápida de campos de linhas CSV/log
Exemplo de Trabalho
# Encontra todos os TODO(FIXME) em fontes Python
rg -n "TODO|FIXME" -g "*.py" src/ tests/
# Encontra configuração referenciando host Redis antigo
rg -l "redis://legacy" --glob "!uv.lock"
# Logs: erros na última hora com ID de requisição
journalctl -u billing-api --since "1 hour ago" | rg "request_id=550e8400"
# Exclui logs rotacionados obsoletos com mais de 14 dias (primeiro em modo de teste)
find /var/log/billing-api -name "*.log.*" -mtime +14 -printO que isso demonstra:
- Filtros de tipo e glob do
rgreduzem o ruído -llista apenas arquivos para planejamento de substituição em massajournalctlcanalizado parargpara busca estruturadafind -printantes de-deletepara segurança
Mergulho Profundo
Como Funciona
- grep - Correspondência de regex orientada por linha;
-rrecursivo (lento em árvores grandes). - ripgrep - Paralelo, ciente de gitignore, padrão para busca de código.
- find - Travessia de diretório por nome, tempo, tamanho, tipo.
- sed - Editor de stream para substituir/excluir linhas.
- awk - Processamento orientado por coluna.
Escolha de Ferramenta
| Tarefa | Ferramenta |
|---|---|
| Busca de símbolo de código | rg pattern src/ |
| Logs JSON | jq (preferido) ou rg na chave |
| Arquivo por nome | find . -name '*.py' |
| Substituição in-place | sed -i.bak com backup |
| 3ª coluna CSV | awk -F, '{print $3}' |
Notas Python
# Equivalente a rg para um arquivo com números de linha
grep -n "def main" src/app/cli.py
# Encontra marcadores __init__.py vazios
find src -name "__init__.py" -emptyArmadilhas
grep -ra partir de / - Tempestade de IO e erros de permissão. Correção: sempre comece do projeto ou/var/log/app.- sed -i sem backup em produção - Configuração quebrada irrecuperável. Correção:
-i.bakou edite localmente + implante. - Ganância de Regex -
sedincorreto corresponde a configuração multilinhas. Correção: teste em cópia; prefirargpara localizar + edição manual para arquivos críticos. - Ignorando correspondências binárias -
grepimprime "Binary file matches". Correção:rgougrep -I. - Classe de caracteres quebrada pelo locale - Ordenação/correspondência inesperada. Correção:
LC_ALL=Cpara logs ASCII. - Awk em JSON - Frágil contra objetos aninhados. Correção:
jqpara logs JSON.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Busca do IDE | Refatoração local | Logs de produção apenas via SSH |
git grep | Apenas arquivos rastreados | Arquivos gerados ou de log |
ag / ack | Ambientes legados | rg disponível |
| Script Python | Análise complexa | Linha única mais rápida no shell |
FAQs
rg ou git grep?
rg para velocidade e regras de ignorar; git grep ao buscar apenas snapshots commitados em uma revisão específica.
Busca sem distinção entre maiúsculas e minúsculas?
rg -i pattern ou grep -i.
Regex multilinhas?
rg -U modo multilinhas para padrões entre linhas - use com moderação.
find mtime vs atime?
mtime alteração de conteúdo do arquivo; atime acesso (frequentemente desativado em servidores por desempenho).
sed GNU vs BSD no Mac?
O sed do macOS requer extensão de backup sed -i '' - teste no SO de destino.
Excluir venv do grep?
rg ignora automaticamente; para grep use --exclude-dir=.venv.
Contar correspondências?
rg -c pattern por arquivo ou rg pattern | wc -l.
Buscar logs comprimidos?
zgrep / zcat file.gz | rg pattern.
Exclusão paralela com find?
Evite find -delete em escala sem um teste de -print primeiro.
Regex em Python vs shell?
Prefira Python re no código da aplicação; regex do shell apenas para operações "one-off".
Relacionados
- re - Expressões Regulares - Regex em Python
- Pipes & Processamento de Texto - composição de ferramentas
- Análise de Logs e Texto - pipelines de log
- Produtividade do Shell - aliases para busca
Versões da Pilha: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.