Когда требуется найти одну запись в множестве лог файлов поможет конвейер следующего вида:
find /path/to/log_folder -name 'FileNamePattern*' -mtime -2 -type f |xargs grep -En 'SearchWord'
Как это работает:
find
find /path/to/log_folder -name 'FileNamePattern*' -mtime -2 -type f
На выходе получаем список полных путей всех файлов, которые соответствуют маске
параметр | Описание |
/path/to/log_folder |
путь до папки, в которой ищем |
-name 'FileNamePattern*' |
паттерн название файлов например, в папке /var/log/ можно делать поиск только по boot.log.* игнорируя все остальные данные |
-mtime -2 |
файлы не старше двух дней |
-type f |
тип - только файлы, игнорируем каталоги и другие значения |
xargs
Далее конвейером передаем вывод результатов на xargs.
xargs подставляет все пареметры полученные через конвейер в конец строки, в нашем случае это grep.
Команда grep в конце принимает имя файла внутри которого нужно осуществлять поиск.
grep
grep <params> <SearchWord> <Patch>
Заметка: grep не ищет многострочные выражения, для многострочного поиска следует использовать sed
Опция | Описание |
-E |
использовать Regex Варианты: -E = полный regex -F = образцы строк, без regex. (grep -F <params> аналогично fgrep <params>) по умолчанию упрощенный regex |
-n | показывать номера строк |