Ugrep – um grep mais poderoso, rápido, amigável ao usuário e compatível
Uma nova alternativa ao grep, o ugrep, está sendo comparada com ferramentas estabelecidas como ripgrep e GNU grep em termos de velocidade, conjunto de recursos e compatibilidade. Os comentaristas destacam os pontos fortes do ugrep — TUI integrada, correspondência aproximada, suporte a arquivos compactados e índices, além de opções no estilo GNU — enquanto questionam suas alegações de benchmark e apontam incompatibilidades em casos extremos com GNU grep e tratamento de locale. Grande parte do debate gira em torno de trade-offs entre desempenho bruto, semântica de regex, tamanho binário, portabilidade e a praticidade de adotar ferramentas não padronizadas em ambientes onde grep puro está sempre disponível.
Comparações de desempenho (ugrep vs ripgrep e outros)
- O README do ugrep afirma que ele é mais rápido do que GNU grep, ag, ack, sift e, normalmente, mais rápido do que ripgrep.
- Alguns კომენტadores são céticos em relação aos benchmarks publicados pelo próprio ugrep e preferem comparações independentes.
- Um subthread detalhado discute a metodologia de benchmark:
- Ferramentas do tipo grep são orientadas a linhas e podem acrescentar otimizações além de uma biblioteca regex bruta.
- Números de uso de memória podem ser enganosos devido ao mmap inflando o RSS; desativar o mmap mostra uso real de heap muito menor.
- O desempenho depende fortemente do tamanho do arquivo, da frequência de correspondências e da forma do padrão (por exemplo, repetições limitadas como
.{100}podem sobrecarregar muitos mecanismos de regex).
- Hypergrep/Hyperscan são discutidos como alternativas muito rápidas, especialmente para muitos padrões, mas com semântica de correspondência delicada e problemas de compilação/portabilidade.
Recursos e diferenças em relação ao ripgrep/grep
- O ugrep está disponível em repositórios baseados em Debian e tem como objetivo ser compatível com GNU grep, incluindo opções e comportamento, embora usuários encontrem incompatibilidades concretas (por exemplo, tratamento de locale/classes de caracteres).
- Recursos notáveis do ugrep elogiados:
- Pager integrado com busca nos resultados (multiplataforma).
- Correspondência aproximada.
- Busca recursiva em arquivos compactados que respeita a estrutura do arquivo.
- TUI interativa e interface para construção de regex.
- Alguns ainda preferem ripgrep por: ferramentas mais maduras, familiaridade, velocidade “suficiente” e bons padrões padrão.
Sintaxe de regex e limites de palavras
- Debate sobre sintaxe POSIX BRE/ERE versus estilo PCRE.
- Alguns usuários permanecem na sintaxe clássica do grep; outros veem isso como motivo para evitar o grep.
- A regex padrão do ripgrep é semelhante a
grep -E, com garantias de tempo linear (sem backrefs/lookaround). - Há discussão sobre limites de palavras (
\b,\<,\>) e definições Unicode de “palavra” diferindo entre mecanismos.
Paginação, TUI e “amigabilidade ao usuário”
- O pager integrado no ugrep é um ponto de venda para alguns, especialmente no Windows; outros o veem como um antirecurso e preferem pipes explícitos para
less/outros pagers. - Várias TUIs baseadas em ripgrep e integrações com fzf são mencionadas como alternativas.
- “Amigável ao usuário” é interpretado por alguns como a presença de uma TUI interativa, em vez de ergonomia tradicional de CLI.
Indexação e grandes repositórios
- O indexador n‑gram do ugrep existe, mas é relatado como lento (por exemplo, indexar a árvore do kernel Linux muito mais devagar do que o
cindexdocsearch). - Ele cria arquivos de índice por diretório e é rotulado como beta; a reindexação é incremental.
Configuração, padrões e portabilidade
- O ripgrep usa um caminho de configuração baseado em variável de ambiente em vez de XDG; alguns acham isso mais simples, outros não gostam da divergência.
- São levantadas preocupações sobre a aplicabilidade do XDG no Windows/macOS.
- Alguns usuários não adotam greps não padronizados porque dependem de
greppuro estar presente em todos os sistemas, especialmente em máquinas restritas ou de clientes.
Outras ferramentas e notas do ecossistema
- Hypergrep, grab, hound, csearch, ripgrep-all, fzf e vários pagers (
less,bat, outros) são mencionados. - O thread destaca que muitos greps modernos são “bons o suficiente”, e a escolha muitas vezes se resume a pequenas preferências/recursos em vez de uma dominância clara.