Поиск по сайту:

Как искать с помощью «grep», используя строки в файле


Grep — замечательный инструмент для поиска в файлах журналов и извлечения полезной информации, но что, если вы хотите выполнить поиск в файле журнала, используя гигантский список ключевых слов из другого файла? К счастью, эта функция также встроена.

Это случилось со мной, когда я хотел получить список всех URL-адресов, которые были запрошены огромным блоком IP-адресов, которые оскорбительно атаковали наш сервер. После определения и создания списка из тысячи IP-адресов мне нужно было извлечь URL-адреса из основного файла журнала, чтобы определить наиболее запрашиваемые ресурсы.

Для этого вам нужно использовать аргумент -f, который позволяет вам указать файл для списка шаблонов для поиска.

-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.)

Предполагая, что ваш набор ключевых слов или строк находится в файле с именем «searchstrings», вы можете использовать аргумент в командной строке, как в следующем примере. Поскольку этот поиск будет генерировать массу данных, часть команды «> output.txt» отправляет результат команды в файл с именем output.txt, который можно анализировать отдельно.

grep -f searchstrings filetosearch > output.txt

Единственная проблема с использованием аргумента -f заключается в том, что grep попытается интерпретировать ключевые слова, как если бы они были шаблонами, что может замедлить работу при разборе очень большого файла. Таким образом, вы также можете указать параметр -F, который указывает grep выполнять только точные совпадения со строками.

 -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.)

Таким образом, полная команда будет выглядеть примерно так:

grep -F -f searchstrings filetosearch > output.txt

Grep — невероятно мощный способ поиска файлов журналов, поэтому стоит потратить время на просмотр файла man.