Обложка канала

ServerAdmin.ru

12437 @srv_admin

Авторская информация о системном администрировании.

ServerAdmin.ru

4 года назад
Открыть в
​​Рассмотрел уже много различных скриптов и консольных команд на канале. Почти везде так или иначе используется утилита grep. Отдельно её ни разу не рассматривал и сейчас хочу это исправить. Какой Linux админ не любит хорошенько грепнуть? Наравне с cat это, пожалуй, самая популярная консольная утилита, которую используешь постоянно. Буквально каждый день. Почти любой консольный вывод я грепаю, чтобы получить только нужную информацию. Ниже несколько примеров не самых распространённых использований grep, но при этом полезных. Основной функционал, думаю, и так все знают. Исключение из вывода части строки: # echo 'raz_dva_tri' | grep -Po '\Kdva_tri' dva_tri Начало фразы raz_ вырезали. Здесь используются два ключа: P (perl-regexp) - использование регулярного выражение Perl, o (only-matching) - возвращает только совпадение с образцом. \K - регулярка, которая отбрасывает всё, что перед ней. Проверка файла на наличие pattern. # grep 'pattern' file > /dev/null && echo 'String Found' # grep -q 'pattern' file && echo 'String Found' Если pattern не будет найден в файле, конструкция && не сработает. Посчитать количество совпадений pattern в файле: # grep -c pattern file Рекурсивный поиск файлов, где найден шаблон: # grep -lr 'pattern' /web/site.ru И обратная история, когда нужно вывести файлы, которые не содержат шаблон: # grep -Lr 'pattern' /web/site.ru Опять рекурсивный поиск по директории, только выводим не имена файлов, а все совпадающие строки: # grep -hr 'pattern' /var/log Бывает нужно когда какой-то ip пробиваешь по нескольким логам. Когда через grep нужно вывести символы регулярных выражений, их нужно экранировать \ или использовать ключ F (fixed-strings): # cat /var/log/syslog | grep 'systemd\[1]' # cat /var/log/syslog | grep -F 'systemd[1]' Да, я знаю, что не надо тут использовать cat, но я привык. Правильнее сделать так: # grep -F 'systemd[1]' /var/log/syslog Ничего не могу с собой поделать. Использую всегда с cat. Причина проста - не всегда нужен grep, а смотреть что-то в консоли я привык через cat. Так что мне проще сначала сделать просто cat, а потом грепнуть вывод в случае необходимости. Ещё одна полезная опция grep - i (ignore-case) игнорировать регистр шаблона. Будут найдены и заглавные, и строчные совпадения. # grep -i 'Page.html' /web/site Вывести рядом с найденной строкой 2 до и 2 после: # last | grep -A2 -B2 'reboot' #bash #terminal