Возможно, у вас уже возникала ранее необходимость найти в файлах заданный набор текста (строку или шаблон). Специально для решения подобной задачи существует такая интересная утилита grep. И в рамках сегодняшней статьи мы покажем Вам 12 практических примеров использования команды grep
в Linux.
Содержание:
- Что такое утилита grep и как ее установить
- Примеры интересного использования команды grep в Linux
- Поиск файлов с помощью команды grep
- Фильтрация содержимого файлов с помощью команды grep (игнорирование закомментированных строк)
- Обнаружение всех файлов с расширением .mp3 с помощью команды grep
- Отображение строк до или после строки с результатом поиска
- Выведение заданного числа всех соседних строк с помощью команды grep
- Подсчет числа строк, содержащих искомое выражение
- Указание номера искомой строки в файле
- Рекурсивный поиск строки по всем каталогам с помощью команды grep
- Выведение точного вхождения выражения как отдельного слова
- Поиск в архивах gzip
- Проверка на соответствие более сложному регулярному выражению в файлах с помощью команды egrep
- Выявление целой строки, соответствующей выражению
- Выводы
Что такое утилита 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 с трудоустройством!
- Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
- Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
- Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
- Проведем вечерние онлайн-лекции на нашей платформе.
- Согласуем с вами удобное время для практик.
- Если хотите индивидуальный график — обсудим и реализуем.
- Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
- Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
- отредактировать или создать с нуля резюме;
- подготовиться к техническим интервью;
- подготовиться к конкурсу на понравившуюся вакансию;
- устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.