12 практических примеров команды grep в Linux

12 практических примеров команды grep в Linux

Возможно, у вас уже возникала ранее необходимость найти в файлах заданный набор текста (строку или шаблон). Специально для решения подобной задачи существует такая интересная утилита grep. И в рамках сегодняшней статьи мы покажем Вам 12 практических примеров использования команды grep в Linux.

Содержание:

  1. Что такое утилита grep и как ее установить
    1. Устанавливаем grep в дистрибутивах Debian и Ubuntu
    2. Устанавливаем grep в дистрибутивах RHEL, CentOS и Fedora
  2. Примеры интересного использования команды grep в Linux
    1. Поиск файлов с помощью команды grep
    2. Фильтрация содержимого файлов с помощью команды grep (игнорирование закомментированных строк)
    3. Обнаружение всех файлов с расширением .mp3 с помощью команды grep
    4. Отображение строк до или после строки с результатом поиска
    5. Выведение заданного числа всех соседних строк с помощью команды grep
    6. Подсчет числа строк, содержащих искомое выражение
    7. Указание номера искомой строки в файле
    8. Рекурсивный поиск строки по всем каталогам с помощью команды grep
    9. Выведение точного вхождения выражения как отдельного слова
    10. Поиск в архивах gzip
    11. Проверка на соответствие более сложному регулярному выражению в файлах с помощью команды egrep
    12. Выявление целой строки, соответствующей выражению
  3. Выводы

Что такое утилита grep и как ее установить

Grep — это эффективная утилита для поиска текста, встроенная в каждый из популярных дистрибутивов ОС семейства GNU / Linux. Однако даже в том маловероятном случае, если данное приложение отсутствует в вашей сборке, его можно без лишних сложностей установить. В этом Вам поможет менеджер пакетов (apt — в дистрибутивах на основе Debian и Ubuntu, yum — в дистрибутивах на основе RHEL, Fedora и CentOS).

Устанавливаем grep в дистрибутивах Debian и Ubuntu

Чтобы установить утилиту grep в дистрибутивах Debian и Ubuntu — введите в командную строку с root-правами команду apt install и grep в качестве аргумента:

Устанавливаем grep в дистрибутивах RHEL, CentOS и Fedora

Чтобы установить утилиту grep в дистрибутивах RHEL, CentOS и Fedora — введите в командную строку с root-правами команду yum install и grep в качестве аргумента:

Примеры интересного использования команды grep в Linux

Скорее всего, наиболее простым и органичным путем изучения возможностей команды grep является практика. Потому мы советуем опробовать самые распространенные примеры.

Поиск файлов с помощью команды grep

Допустим, что вы установили на свой ПК популярный дистрибутив Ubuntu. И в дальнейшем планируете добавить в библиотеку Python определенные скрипты. С другой стороны, на веб-сайте с необходимыми материалами указано, что они есть для разных версий языка программирования Python. При этом вы не знаете точно, какая именно версия присутствует в вашей версии Ubuntu. А также — какие дополнительные модули идут в комплекте. Для выяснения таких подробностей — поставьте знак конвейера (|) после команды dpkg с опцией -l и добавьте далее команду grep с опцией -i и аргументом python:

 

Пример вывода:

 

Команда dpkg -l выводит на экран установленные пакеты с расширением *.deb. Результат вывода с помощью символа передается по конвейеру команде grep. При этом опция -i позволяет команде игнорировать регистр в названиях.

Важно: команды Linux вообще и grep в частности чувствительны к регистру — потому стоит выработать привычку к использованию опции -i, чтобы не упускать все возможные результаты.

Фильтрация содержимого файлов с помощью команды grep (игнорирование закомментированных строк)

Стоит отметить, что команда grep может использоваться и для фильтрации результатов поиска внутри одного или нескольких файлов.

Допустим, что Ваш веб-сервер Apache работает неправильно. И вы решили обратиться на форум в Интернете для поиска возможных вариантов решения проблемы. Члены сообщества посоветовали показать им содержимое файла /etc/apache2/sites-available/default-ssl. Однако данный файл содержит много закомментированных строк.

К счастью, строки с комментариями можно легко отфильтровать. Для этого введите команду grep с опцией –v  и добавьте в качестве первого аргумента знак хэштега в кавычках ("#"), а в качестве второго аргумента путь к расположению файла:

 

Опция –v указывает команде, что на экран нужно выводить те строки, в которых нет искомого выражения. Тогда как по умолчанию вывод состоит из строк, включающих искомое выражение. Применительно к нашему примеру — будут выведены только незакомментированные строки.

Обнаружение всех файлов с расширением .mp3 с помощью команды grep

Команда grep незаменима в случае фильтрации результатов из стандартного потока 1 (stdout).

Допустим, на Вашем ПК имеется каталог, содержащий множество музыкальных файлов в разных форматах. И по какой-то причине Вам понадобилось вывести список всех файлов с расширением *.mp3, которые созданы исполнителем ABC и не являются ремиксами. Для этого введите в командную строку следующую комбинацию команд:

 

Теперь давайте проанализируем использованные команды, опции и аргументы:

    • find — утилита поиска файлов в файловой системе;
    • . — указывает, что поиск следует вести относительно текущего рабочего каталога;
    • –name — проверяет название файлов на соответствие заданному шаблону;
    • "*.mp3" — шаблон, соответствующий файлам искомого формата;
    • | — объединяет команды в конвейер (вывод первой команды передается на ввод второй — и так далее);
    • grep с опцией –i — поиск по выводу команды find с игнорированием регистра;
    • "ABC" — шаблон, по которому осуществляется поиск;
    • grep –vi — поиск по выводу предыдущей команды grep и исключение результатов, соответствующих заданному шаблону;
    • "remix" — шаблон, по которому осуществляется поиск.

В результате первая команда находит все файлы с расширением *.mp3 в названии. После чего результаты вывода фильтруются первой командой grep и находятся строки, включающие название исполнителя — "ABC". Далее результаты вывода фильтруются второй командой grep — и из них исключаются строки, содержащие шаблон "remix".

Отображение строк до или после строки с результатом поиска

Часто пользователю нужно вывести на экран не только строку, содержащую искомый шаблон. Но и несколько строк до или после нее, чтобы лучше понимался контекст. Специально на такой случай у команды grep есть две особых опции:

  • -A (от англ. After) — указанное количество строк до шаблона;
  • -B (от англ. Before) — указанное количество строк после шаблона.

Попробуем отфильтровать вывод команды ifconfig, который для непривычного пользователя может быть излишне объемным.

Таким образом Вы получите строку, содержащую шаблон eth0, а также 4 строки до нее:

 

Тогда как таким способом Вы получите строку, содержащую шаблон UP, а также 2 строки после нее:

 

В результате у Вас на экране будет ровно столько информации, сколько Вам нужно в конкретный момент.

Выведение заданного числа всех соседних строк с помощью команды grep

В том случае, если Вы точно не знаете, какие именно соседние строки (до или после строки, содержащей шаблон) Вам нужны — воспользуйтесь командой grep с опцией -C. Следующая комбинация команд выведет на экран по 2 строки до и после строчки вывода команды ifconfig, содержащей шаблон lo:

Подсчет числа строк, содержащих искомое выражение

В некоторых случаях Вам могут понадобится не сами строчки, включающие заданное выражение, а их общее количество. В таком случае воспользуйтесь опцией -c. Следующая комбинация команд выведет на экран количество строк в выводе команды ifconfig, включающих шаблон inet6.

Указание номера искомой строки в файле

Еще один полезный прием, которым часто пользуются разработчики и тестировщики программного обеспечения — это выяснение номера строки, включающей заданный шаблон. Для этого введите в командную строку команду grep с опцией  -n:

 

В результате на экран будут выведены строки, включающие шаблон ("main"), а также — их порядковые номера в файле setup.py.

Важно: нумерация при использовании опции -n команды grep ведется с единицы, а не с нуля

Рекурсивный поиск строки по всем каталогам с помощью команды grep

Предположим, что Вам необходимо найти все вложения указанного выражения в текущем каталоге со всеми его подкаталогами и так далее. Для этого добавьте к команде grep опцию -r:

 

В результате утилита будет рекурсивно искать выражение "function" по всему дереву каталогов, начинающемуся с рабочего каталога.

Выведение точного вхождения выражения как отдельного слова

По умолчанию утилита считает соответствующими условиям поиска и те случаи, в которых шаблон является частью более длинного слова. В тех случаях, когда Вас интересует полное совпадение — воспользуйтесь командой grep с опцией -w:

 

В результате на экране будут показаны строки вывода команды ifconfig, которые содержат шаблон RUNNING в качестве отдельного слова.

При этом частичное соответствие с искомым шаблоном больше не будет приводить к выводу того же результата.  То есть, следующий пример приведет к иному выводу:

 

В результате на экране будут показаны строки вывода команды ifconfig, которые содержат шаблон RUN в качестве отдельного слова.

Поиск в архивах gzip

Утилита gzip (от англ. GNU Zip) — это популярный инструмент для сжатия данных без потерь в Linux, использующий алгоритм Deflate.

При этом с помощью команды zgrep можно вести поиск по сжатому архиву точно так же, как Вы это делали вне сжатого архива с помощью команды grep. Следующая команда будет искать в архиве /var/log/syslog.2.gz строки, содержащие шаблон error с игнорированием регистра:

Проверка на соответствие более сложному регулярному выражению в файлах с помощью команды egrep

Утилита egrep — это почти полный аналог утилиты grep, однако с дополнительными возможностями. В частности, с ее помощью можно вести поиск по расширенным регулярным выражениям (например, с использованием метасимволов).

Рекомендуется к прочтению: Какая разница между Grep, Egrep и Fgrep в Linux

Команда egrep незаменима при попытке найти что-либо в исходном коде программы.

Стоит отметить, что функции egrep можно использовать и в обычном варианте grep. Для этого добавьте к команде опцию -E:

Выявление целой строки, соответствующей выражению

Последняя в рамках этой статьи функция — это поиск строк, полностью соответствующих искомому выражению. Для этого используется fgrep — еще одна команда, производная от обычной команды grep. К такому же результату приведет использование команды grep с опцией -F.

Кроме того, fgrep с опцией -f будет построчно брать шаблоны для поиска из файла, путь к которому указан в качестве первого аргумента (file_full_of_patterns.txt). И выполнять их поиск в файле, путь к которому указан в качестве второго аргумента (file_to_search.txt):

 

В результате на экран будут выведены строки, полностью совпадающие в обоих файлах. Подобный прием особенно полезен при работе с объемными файлами настроек, файлами журналов (логами) и т.п.

Выводы

Возможности команды grep куда более грандиозны и ограничиваются только Вашим воображением. Стоит отметить, что фильтрация ввода в умелых руках позволяет добиться потрясающего уровня автоматизации рутинных задач за счет написания сложных сценариев оболочки Linux. Именно такие навыки сегодня требуются работодателям и точно будут полезны как системным администраторам, так и DevOps-инженерам, сетевым инженерам и представителям многих других ИТ-профессий. Будьте изобретательны, экспериментируйте с примерами применения команды grep из нашего руководства! И тогда Вы существенно повысите уровень своей экспертности.

Спасибо  за время, уделенное прочтению статьи!

Если возникли вопросы — задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet / DevOps (программируемые системы) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Больше похожих постов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения


Поиск по сайту
Лучшее
Популярное
Рубрики
Меню