TG Telegram Group & Channel
ServerAdmin.ru | United States America (US)
Create: Update:

​​Рассмотрел уже много различных скриптов и консольных команд на канале. Почти везде так или иначе используется утилита 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

​​Рассмотрел уже много различных скриптов и консольных команд на канале. Почти везде так или иначе используется утилита 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
👍56👎2


>>Click here to continue<<

ServerAdmin.ru






Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)