
Un envoltorio alrededor de grep, para ayudarte a buscar cosas con grep.
Un envoltorio alrededor de grep para evitar escribir patrones comunes.
Uso grep un montón. Cuando audito bases de código, reviso la salida de meg, o simplemente trato con grandes cantidades de datos. A menudo termino usando patrones bastante complejos como este:
▶ grep -HnrE '(\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))' *
Es muy fácil equivocarse al escribir todo eso, y puede ser difícil saber si no has obtenido ningún resultado porque no hay nada que encontrar, o porque te equivocaste al escribir el patrón o elegiste las opciones incorrectas.
Escribí gf para dar nombres a las combinaciones de patrones y opciones que uso todo el tiempo. Así que el comando anterior se convierte simplemente en:
▶ gf php-sources
Las definiciones de los patrones se almacenan en ~/.gf como pequeños archivos JSON que se pueden mantener bajo control de versiones:
▶ cat ~/.gf/php-sources.json
{
"flags": "-HnrE",
"pattern": "(\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))"
}
Para ayudar a reducir un poco la longitud y complejidad de los patrones, también puedes especificar una lista de múltiples patrones:
▶ cat ~/.gf/php-sources-multiple.json
{
"flags": "-HnrE",
"patterns": [
"\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)",
"php://(input|stdin)"
]
}
Hay más archivos de ejemplo de patrones en el directorio examples.
Puedes usar la opción -save para crear archivos de patrones desde la línea de comandos:
▶ gf -save php-serialized -HnrE '(a:[0-9]+:{|O:[0-9]+:"|s:[0-9]+:")'
Hay un script de autocompletado incluido, para que puedas presionar 'tab' y ver cuáles son tus opciones:
▶ gf <tab>
base64 debug-pages fw php-curl php-errors php-sinks php-sources sec takeovers urls
Para que el autocompletado funcione, necesitas hacer source del archivo gf-completion.bash en tu .bashrc o similar:
source ~/path/to/gf-completion.bash
Para que el autocompletado funcione, necesitas habilitar el autocompletado (no es necesario si tienes oh-my-zsh) usando autoload -U compaudit && compinit o añadiéndolo a tu .zshrc.
Luego haz source del archivo gf-completion.zsh en tu .zshrc o similar:
source ~/path/to/gf-completion.zsh
Nota: si estás usando oh-my-zsh o similar, puede que encuentres que gf es un alias de git fetch. Puedes asignar un alias al binario de gf con otro nombre, o usar unalias gf para eliminar el alias de git fetch.
Hay algunos motores de búsqueda de código increíbles que pueden ser un mejor reemplazo para grep. Un buen ejemplo es the silver searcher. Es más rápido (como mucho más rápido) y presenta los resultados de una manera más digerible visualmente. Para utilizar un motor diferente, añade engine: <other tool> al archivo de patrón correspondiente:
# 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 debe eliminarse del archivo aws-keys.json para que ag pueda ejecutarse correctamente.Si tienes Go instalado y configurado, puedes instalar gf con:
▶ go get -u github.com/tomnomnom/gf
Si has instalado usando go get, puedes habilitar el autocompletado en tu .bashrc de esta manera:
▶ echo 'source $GOPATH/src/github.com/tomnomnom/gf/gf-completion.bash' >> ~/.bashrc
Ten en cuenta que tendrás que reiniciar tu terminal, o ejecutar source ~/.bashrc para que los cambios tengan efecto.
Para empezar rápidamente, puedes copiar los archivos de patrones de ejemplo a ~/.gf de esta manera:
▶ cp -r $GOPATH/src/github.com/tomnomnom/gf/examples ~/.gf
Mis patrones personales que he incluido como ejemplos puede que no te resulten muy útiles, pero con suerte siguen siendo un punto de referencia razonable.
¡En realidad me interesarían sobre todo nuevos archivos de patrones! Si tienes algo que buscas con grep regularmente, no dudes en abrir un PR para añadir nuevos archivos de patrones al directorio examples.
Las correcciones de errores también son bienvenidas como siempre :)