Продолжаем популяризировать Linux. Я не буду вас грузить историей возникновения утилиты grep, её расшифровкой – оно вам надо? Нет. Сразу перейдём к практике.
Сразу практика
- Поиск определённой строки в текстовом файле (посмотрим в логе веб-сервера, кто там пытается перебирать пароль на админку сайта):
# cat litl-admin-SSL.log.1 | grep "LOGIN\ FAILED"
Очень много записей. Как видите, grep работает как будто текстовый фильтр. Кстати, можно использовать регулярные выражения. Например указатели начала или конца строки (^ и $ соответственно). Можно использовать различные конвейеры для поэтапной фильтрации различных подстрок. Об этом следующий пример. - Поиск строк, которые НЕ ВКЛЮЧАЮТ указнные шаблон (используется ключ -v). Например, посмотрим, у кого из пользователей есть интерактивная оболочка:
# cat /etc/passwd | grep -v "nologin" | grep -v "false"
4 пользователя. Все легальные. Хорошо ) - Поиск строк во всех файлах в указанном каталоге. Часто использую этот пример, чтобы найти какой-то фрагмент в исходниках. Например найдём, в каких файлах упоминается имя скрипта “ads.js”
# grep -rn "ads.js"
Ключи -r означает рекурсивный поиск в подкаталогах (от текущего) в каждом файле. А -n – указывает имя файла и номер строки. Очень удобно потом открыть файл редактором и перейти на нужный фрагмент. - То же самое, но вывести ТОЛЬКО имена файлов:
# grep -rl "ads.js"
- Регистронезависимый поиск. Да, шаблон регистрозависим. Если есть подозрение, что где-то в примерах выше будет указано имя файла “Ads.js” – не прокатит. Дабы не опростоволоситься, стоит добавить ключик -i и всё будет хорошо:
# grep -irl "ads.js"
Достаточно ли этого? На мой взгляд – вполне. Есть конечно какие-то замудрёные экзотические сценарии, но колоссальный спектр задач покрывается решениями из этих 5 практических примеров. К слову, я успешно фильтровал текстовые логи на миллионы строк без особых проблем, так что инструмент великолепный!
Comments: