
Un wrapper autour de grep, pour vous aider à grepper des choses
A wrapper around grep to avoid typing common patterns.
J'utilise beaucoup grep. Lorsque j'audite des bases de code, que j'examine la sortie de meg, ou que je traite simplement de grandes quantités de données, je finis souvent par utiliser des motifs assez complexes comme celui-ci :
▶ grep -HnrE '(\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))' *
Il est très facile de se tromper en tapant tout cela, et il peut être difficile de savoir si vous n'avez aucun résultat parce qu'il n'y en a pas à trouver, ou parce que vous avez mal écrit le motif ou choisi les mauvais drapeaux.
J'ai écrit gf pour donner des noms aux combinaisons de motifs et de drapeaux que j'utilise tout le temps. La commande ci-dessus
devient donc simplement :
▶ gf php-sources
Les définitions de motifs sont stockées dans ~/.gf sous forme de petits fichiers JSON qui peuvent être placés sous contrôle de version :
▶ cat ~/.gf/php-sources.json
{
"flags": "-HnrE",
"pattern": "(\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))"
}
Pour aider à réduire un peu la longueur et la complexité des motifs, vous pouvez également spécifier une liste de plusieurs motifs :
▶ cat ~/.gf/php-sources-multiple.json
{
"flags": "-HnrE",
"patterns": [
"\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)",
"php://(input|stdin)"
]
}
Il y a d'autres exemples de fichiers de motifs dans le répertoire examples.
Vous pouvez utiliser le drapeau -save pour créer des fichiers de motifs à partir de la ligne de commande :
▶ gf -save php-serialized -HnrE '(a:[0-9]+:{|O:[0-9]+:"|s:[0-9]+:")'
Un script d'auto-complétion est inclus, vous pouvez donc appuyer sur « tab » pour afficher vos options :
▶ gf <tab>
base64 debug-pages fw php-curl php-errors php-sinks php-sources sec takeovers urls
Pour faire fonctionner l'auto-complétion, vous devez source le fichier gf-completion.bash dans votre .bashrc ou similaire :
source ~/path/to/gf-completion.bash
Pour faire fonctionner l'auto-complétion, vous devez activer l'auto-complétion (pas nécessaire si vous avez oh-my-zsh) en utilisant autoload -U compaudit && compinit ou en l'ajoutant à .zshrc
Ensuite, source le fichier gf-completion.zsh dans votre .zshrc ou similaire :
source ~/path/to/gf-completion.zsh
Remarque : si vous utilisez oh-my-zsh ou similaire, vous constaterez peut-être que gf est un alias pour git fetch. Vous pouvez soit
créer un alias pour le binaire gf vers autre chose, soit unalias gf pour supprimer l'alias git fetch.
Il existe d'excellents moteurs de recherche de code qui peuvent remplacer avantageusement grep.
Un bon exemple est the silver searcher.
Il est plus rapide (comme beaucoup plus rapide) et présente les résultats d'une manière visuellement plus digeste.
Pour utiliser un moteur différent, ajoutez engine: <other tool> au fichier de motif correspondant :
# 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 doit être retiré du fichier aws-keys.json pour que ag fonctionne correctement.Si vous avez Go installé et configuré, vous pouvez installer gf avec :
▶ go get -u github.com/tomnomnom/gf
Si vous avez installé avec go get, vous pouvez activer l'auto-complétion dans votre .bashrc comme ceci :
▶ echo 'source $GOPATH/src/github.com/tomnomnom/gf/gf-completion.bash' >> ~/.bashrc
Notez que vous devrez redémarrer votre terminal ou exécuter source ~/.bashrc pour que les changements
prennent effet.
Pour démarrer rapidement, vous pouvez copier les fichiers de motifs d'exemple vers ~/.gf comme ceci :
▶ cp -r $GOPATH/src/github.com/tomnomnom/gf/examples ~/.gf
Mes motifs personnels que j'ai inclus comme exemples ne vous seront peut-être pas très utiles, mais j'espère qu'ils constituent tout de même un point de référence raisonnable.
Je serais en fait surtout intéressé par de nouveaux fichiers de motifs ! Si vous avez quelque chose que vous recherchez régulièrement avec grep, n'hésitez pas à soumettre une PR pour ajouter de nouveaux fichiers de motifs au répertoire examples.
Les corrections de bugs sont également les bienvenues comme toujours :)