Grep é uma ferramenta incrível para pesquisar arquivos de log em busca de informações úteis, mas e se você quiser pesquisar um arquivo de registro usando uma lista gigante de palavras-chave de outro arquivo? Por sorte, ele também tem esse recurso embutido.
Isso aconteceu comigo quando eu queria extrair uma lista de todos os URLs solicitados por um grande bloco de IP que estava atacando abusivamente nosso servidor. Depois de identificar e criar a lista de mil endereços IP, necesitaba extraer las URL del archivo de registro principal para identificar los recursos más solicitados.
Para fazer isso, 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”, você pode usar o argumento na linha de comando como no exemplo a seguir. Uma vez que esta pesquisa irá gerar uma tonelada de dados, a parte "> output.txt ”do comando envia a saída do comando para um arquivo chamado output.txt que pode ser analisado separadamente.
grep -f searchstrings filetosearch > output.txt
O único problema em usar o argumento -féque o grep tentará interpretar as palavras-chave como se fossem padrões, o que pode atrasar você ao analisar um arquivo extremamente grande. Por isso, 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.)
Então, o comando completo acabaria sendo mais assim:
grep -F -f searchstrings filetosearch > output.txt
Grep é uma forma ridiculamente poderosa de pesquisar arquivos de log, então pode valer a pena revisar o arquivo man.