
Un wrapper attorno a grep, per aiutarti a cercare cose.
Un wrapper attorno a grep per evitare di digitare pattern comuni.
Uso grep un sacco. Quando faccio audit di codebase, guardo l'output di meg, o più in generale quando ho a che fare con grandi quantità di dati. Spesso finisco per usare pattern piuttosto complessi come questo:
▶ grep -HnrE '(\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))' *
È davvero facile sbagliare quando si digita tutto questo, e può essere difficile sapere se non hai ottenuto risultati perché non ce ne sono da trovare, o perché hai sbagliato a scrivere il pattern o hai scelto le flag sbagliate.
Ho scritto gf per dare un nome alle combinazioni di pattern e flag che uso continuamente. Quindi il comando sopra diventa semplicemente:
▶ gf php-sources
Le definizioni dei pattern sono salvate in ~/.gf come piccoli file JSON che possono essere tenuti sotto controllo di versione:
▶ cat ~/.gf/php-sources.json
{
"flags": "-HnrE",
"pattern": "(\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))"
}
Per aiutare a ridurre un po' lunghezza e complessità dei pattern, puoi specificare anche una lista di più pattern:
▶ cat ~/.gf/php-sources-multiple.json
{
"flags": "-HnrE",
"patterns": [
"\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)",
"php://(input|stdin)"
]
}
Ci sono altri esempi di file di pattern nella directory examples.
Puoi usare la flag -save per creare file di pattern dalla riga di comando:
▶ gf -save php-serialized -HnrE '(a:[0-9]+:{|O:[0-9]+:"|s:[0-9]+:")'
C'è incluso uno script di auto-completamento, così puoi premere 'tab' per vedere quali sono le tue opzioni:
▶ gf <tab>
base64 debug-pages fw php-curl php-errors php-sinks php-sources sec takeovers urls
Per far funzionare l'auto-completamento devi fare source del file gf-completion.bash nel tuo .bashrc o simili:
source ~/path/to/gf-completion.bash
Per far funzionare l'auto-completamento devi abilitare l'autocompletamento (non necessario se hai oh-my-zsh) usando autoload -U compaudit && compinit oppure inserendolo nel .zshrc
Poi fai source del file gf-completion.zsh nel tuo .zshrc o simili:
source ~/path/to/gf-completion.zsh
Nota: se stai usando oh-my-zsh o simili potresti scoprire che gf è un alias per git fetch. Puoi creare un alias del binario gf per qualcos'altro, oppure unalias gf per rimuovere l'alias git fetch.
Ci sono alcuni fantastici motori di ricerca del codice là fuori che possono essere una valida alternativa a grep.
Un buon esempio è the silver searcher.
È più veloce (come molto più veloce) e presenta i risultati in un modo visivamente più digeribile.
Per utilizzare un motore diverso, aggiungi engine: <altro strumento> al file di pattern pertinente:
# Usando the silver searcher invece di grep per il pattern aws-keys:
# 1. Aggiungendo il motore "ag"
# 2. Rimuovendo la flag E che non è rilevante per ag
{
"engine": "ag",
"flags": "-Hanr",
"pattern": "([^A-Z0-9]|^)(AKIA|A3T|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{12,}"
}
E deve essere rimossa dal file aws-keys.json affinché ag possa funzionare correttamente.Se hai Go installato e configurato puoi installare gf con:
▶ go get -u github.com/tomnomnom/gf
Se hai installato usando go get, puoi abilitare l'auto-completamento nel tuo .bashrc in questo modo:
▶ echo 'source $GOPATH/src/github.com/tomnomnom/gf/gf-completion.bash' >> ~/.bashrc
Nota che dovrai riavviare il terminale, oppure eseguire source ~/.bashrc, affinché le modifiche abbiano effetto.
Per iniziare rapidamente, puoi copiare i file di esempio nella cartella ~/.gf in questo modo:
▶ cp -r $GOPATH/src/github.com/tomnomnom/gf/examples ~/.gf
I miei pattern personali inclusi come esempi potrebbero non esserti molto utili, ma spero siano comunque un ragionevole punto di riferimento.
In realtà sarei molto interessato a nuovi file di pattern! Se hai qualcosa che cerchi regolarmente con grep, sentiti libero di aprire una PR per aggiungere nuovi file di pattern alla directory examples.
Anche le correzioni di bug sono benvenute, come sempre :)