
Um wrapper em torno do grep, para ajudar você a pesquisar coisas com o grep.
Um wrapper ao redor do grep para evitar digitar padrões comuns.
Eu uso grep muito. Ao auditar bases de código, observando a saída do meg, ou apenas lidando com grandes quantidades de dados, muitas vezes acabo usando padrões bastante complexos como este:
▶ grep -HnrE '(\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))' *
É muito fácil errar ao digitar tudo isso, e pode ser difícil saber se você não obteve nenhum resultado porque não há nenhum para encontrar, ou porque você errou ao escrever o padrão ou escolheu as flags erradas.
Escrevi o gf para dar nomes às combinações de padrões e flags que uso o tempo todo. Então o comando acima se torna simplesmente:
▶ gf php-sources
As definições de padrões são armazenadas em ~/.gf como pequenos arquivos JSON que podem ser mantidos sob controle de versão:
▶ cat ~/.gf/php-sources.json
{
"flags": "-HnrE",
"pattern": "(\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))"
}
Para ajudar a reduzir um pouco o comprimento e a complexidade dos padrões, você também pode especificar uma lista de múltiplos padrões:
▶ cat ~/.gf/php-sources-multiple.json
{
"flags": "-HnrE",
"patterns": [
"\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)",
"php://(input|stdin)"
]
}
Há mais alguns arquivos de exemplo de padrões no diretório examples.
Você pode usar a flag -save para criar arquivos de padrões a partir da linha de comando:
▶ gf -save php-serialized -HnrE '(a:[0-9]+:{|O:[0-9]+:"|s:[0-9]+:")'
Há um script de autocompletar incluído, para que você possa pressionar 'tab' e ver quais são suas opções:
▶ gf <tab>
base64 debug-pages fw php-curl php-errors php-sinks php-sources sec takeovers urls
Para que o autocompletar funcione, você precisa executar source no arquivo gf-completion.bash no seu .bashrc ou similar:
source ~/path/to/gf-completion.bash
Para que o autocompletar funcione, você precisa ativar o autocomplete (não é necessário se você tiver oh-my-zsh) usando autoload -U compaudit && compinit ou colocando-o no .zshrc.
Em seguida, execute source no arquivo gf-completion.zsh no seu .zshrc ou similar:
source ~/path/to/gf-completion.zsh
Nota: se você estiver usando oh-my-zsh ou similar, pode descobrir que gf é um alias para git fetch. Você pode criar um alias para o binário do gf, ou usar unalias gf para remover o alias de git fetch.
Existem alguns mecanismos de busca de código incríveis que podem ser uma substituição melhor para o grep. Um bom exemplo é the silver searcher. Ele é mais rápido (tipo bem mais rápido) e apresenta os resultados de uma forma visualmente mais digerível. Para utilizar um mecanismo diferente, adicione engine: <other tool> ao arquivo de padrões relevante:
# Using the silver searcher instead of grep for the aws-keys pattern:
# 1. Adding "ag" engine
# 2. Removing the E flag which is irrelevant for ag
{
"engine": "ag",
"flags": "-Hanr",
"pattern": "([^A-Z0-9]|^)(AKIA|A3T|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{12,}"
}
E precisa ser removida do arquivo aws-keys.json para que o ag seja executado com sucesso.Se você tem o Go instalado e configurado, pode instalar o gf com:
▶ go get -u github.com/tomnomnom/gf
Se você instalou usando go get, pode ativar o autocompletar no seu .bashrc assim:
▶ echo 'source $GOPATH/src/github.com/tomnomnom/gf/gf-completion.bash' >> ~/.bashrc
Observe que você precisará reiniciar o terminal, ou executar source ~/.bashrc, para que as alterações entrem em vigor.
Para começar rapidamente, você pode copiar os arquivos de exemplo de padrões para ~/.gf assim:
▶ cp -r $GOPATH/src/github.com/tomnomnom/gf/examples ~/.gf
Meus padrões pessoais que incluí como exemplos podem não ser muito úteis para você, mas espero que ainda sejam um ponto de referência razoável.
Na verdade, eu estaria muito mais interessado em novos arquivos de padrões! Se você tem algo que costuma procurar com grep regularmente, sinta-se à vontade para abrir um PR para adicionar novos arquivos de padrões ao diretório examples.
Correções de bugs também são bem-vindas como sempre :)