Podemos tornar o grep mais rápido indexando palavras em arquivos? [duplicado]

1

Mais de uma década atrás, imaginei uma versão aprimorada do grep que usaria índices para tornar a pesquisa recursiva mais rápida. Eu nunca cheguei a escrever, mas me pergunto se alguém fez isso!

Minha ideia original era:

  • Mantenha um índice em cache de word -> [line-numbers] para cada arquivo, que será atualizado automaticamente quando o tamanho do arquivo ou o registro de data e hora forem alterados.
  • Use o cache para pesquisas rápidas em qualquer arquivo com índices atualizados, se a expressão puder utilizá-lo.
  • Para expressões de pesquisa em que o índice não pode ajudar, defina o comportamento normal do grep.

Embora essa otimização fosse limitada à pesquisa de palavras inteiras, achei que ela deveria ser compatível com grep, para que pudesse ser removida para substituir /usr/bin/grep e ajudar a acelerar vários scripts existentes que usam o grep.

Existem limitações para esta ideia:

  1. Apenas buscas de palavras ou pesquisas, incluindo determinados termos \<...\> , poderiam se beneficiar dos índices, e o último caso poderia ser complexo de implementar.
  2. O tempo necessário para verificar as estatísticas do arquivo para garantir que os caches estejam atualizados pode diminuir o tempo economizado em pesquisas.

Então você acha que valeria a pena, ou o ponto 2 tornaria a ideia sem valor?

E alguém já tentou isso? Se sim, por favor compartilhe.

    
por joeytwiddle 14.03.2014 / 07:57

1 resposta

2

Isso parece promissor.

link

Code Search is a tool for indexing and then performing regular expression searches over large bodies of source code.

Ele não aceita que os mesmos argumentos sejam grep , notavelmente não aceita uma lista de arquivos e -r é assumido. No entanto, suporta algumas das bandeiras favoritas do grep.

usage: csearch [-c] [-f fileregexp] [-h] [-i] [-l] [-n] regexp

Portanto, ele não pode atuar como um substituto substituto para o grep, mas sob certas condições uma chamada para o grep poderia ser convertida em uma chamada para csearch.

O formato regexp (RE2, quase PCRE) também difere do GNU grep. Por exemplo, os padrões \< e \> não podem ser usados para palavra de início / fim; mas em vez disso, podemos usar \b para limite de palavras.

Para instalar

Em clones do Debian e do Debian:

apt-get install codesearch

Para o Ubuntu 12.04 (e outras versões anteriores ao saucy), faça o download selecionando seu arco (i386 / amd64) aqui e depois instalá-lo com:

$ sudo dpkg -i ~/Downloads/codesearch_*.deb
    
por 14.03.2014 / 08:34