Как искать с помощью «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.