Grep es una herramienta increíble para buscar en archivos de registro y obtener información útil, pero ¿qué sucede si desea buscar un archivo de registro usando una lista gigante de palabras clave de otro archivo? Por suerte, además tiene esa característica incorporada.
Esto me sucedió cuando quise extraer una lista de todas las URL solicitadas por un gran bloque de IP que atacaba abusivamente nuestro servidor. Después de identificar y crear la lista de mil direcciones IP, necesitaba extraer las URL del archivo de registro principal para identificar los recursos más solicitados.
Para hacer esto, querrá utilizar el argumento -f, que le posibilita especificar un archivo para la lista de patrones a buscar.
-f FILE, --file=FILE Obtain patterns from FILE, one per line. The empty file contains zero patterns, and therefore matches nothing. (-f is specified by POSIX.)
Suponiendo que su conjunto de palabras clave o cadenas está en un archivo llamado «cadenas de búsqueda», puede utilizar el argumento en la línea de comando como en el siguiente ejemplo. Dado que esta búsqueda va a generar una tonelada de datos, la parte “> output.txt” del comando envía el resultado del comando a un archivo llamado output.txt que se puede analizar de forma separada.
grep -f searchstrings filetosearch > output.txt
El único problema con el uso del argumento -f es que grep intentará interpretar las palabras clave como si fueran patrones, lo que puede ralentizarlo al analizar un archivo extremadamente grande. Por eso, además puede especificar el parámetro -F, que le dice a grep que solo haga coincidencias exactas con las cadenas.
-F, --fixed-strings Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. (-F is specified by POSIX.)
Entonces, el comando completo terminaría siendo más así:
grep -F -f searchstrings filetosearch > output.txt
Grep es una forma ridículamente poderosa de buscar archivos de registro, por lo que valdría la pena dedicar tiempo a revisar el archivo man.