[Rio-pm] ack!

breno breno em rio.pm.org
Quinta Setembro 6 09:37:47 PDT 2007


Se você (ainda) é usuário constante do "grep", vai se deliciar com o ack!

ack é um substituto do grep voltado para programadores com grandes
árvores de código, capaz de ignorar diretórios .svn/CVS/blib, entende
tipos de arquivos, utiliza expressões regulares e muito mais!

Veja as 10 maiores razões para usar ack ao invés de grep:
-------------------------------------------------------------------------------------

   1. ack é Perl puro, então roda em Windows perfeitamente.

   2. Busca por padrão já recursivamente através de diretórios,
ignorando diretórios .svn, CVS e outros sistemas de controle de
versão.
      * O que você prefere digitar?
            $ grep padrao $(find . | grep -v .svn)
            $ ack padrao

   3. ack ignora por padrão a maioria do lixo que você NÃO QUER procurar
          * diretórios de sistemas de controle de versão
          * blib, o diretório de build do Perl
          * arquivos de backup, como foo~
          * arquivos binários

   4. Permite que você especifique os tipos de arquivos a serem
buscados, como --perl ou --nohtml.
          * O que você prefere digitar?
            $ grep padrao $(find . -name '*.pl' -or -name '*.pm' -or
-name '*.pod' | grep -v .svn)
            $ ack --perl padrao
      (Note que, além disso, o parâmetro --perl do ack também procura
pelo "shebang" (#!) em arquivos sem sufixo, coisa que o find não faz.

   5. Capacidade de filtros de arquivos sem a necessidade de uma busca
por padrão, através de ack -f.
      $ ack -f --perl > todos_os_meus_arquivos_perl

   6. Resultados destacados com cores
.
   7. Utiliza expressões regulares reais de Perl, e não um subconjunto GNU.

   8. Permite que você especifique a saída usando as variáveis especiais do Perl
          * Exemplo: ack '(Mr|Mr?s)\. (Smith|Jones)' --output='$&'

   9. Muitos dos parâmetros de linha de comando são os mesmos do GNU grep:
      -w faz busca apenas por palavras
      -c mostra contagem por arquivo
      -l mostra o nome do arquivo ao invés das linhas
      etc.

  10. O nome do comando é 25% menor. :-) Bah, é 50% menor se
compararmos com grep -r.

-----------------------------------
  _   /|
  \'o.O'
=(___)=
     U    ack!


Mais detalhes sobre a lista de discussão Rio-pm