Возможно, у вас уже возникала ранее необходимость найти в файлах заданный набор текста (строку или шаблон). Специально для решения подобной задачи существует такая интересная команда, как команда grep.
Содержание:
- Что такое утилита grep и как ее установить
- Примеры интересного использования команды
- Поиск необходимых файлов
- Фильтрация найденных командой grep файлов
- Обнаружение всех файлов с расширением .mp3
- Отображение строк до или после строки с результатом поиска
- Выведение заданного числа всех соседних строк
- Подсчет числа строк, содержащих искомое выражение
- Указание номера искомой строки в файле
- Рекурсивный поиск строки по всем каталогам
- Выведение точного вхождения выражения как отдельного слова
- Совпадения в архивах Gzip
- Соответствие более сложному регулярному выражению в файлах
- Выявление целой строки, соответствующей выражению
- Выводы
Что такое утилита grep и как ее установить
Grep — это эффективная утилита для поиска, встроенная в каждый из популярных дистрибутивов ОС GNU/Linux. Однако даже в том маловероятном случае, если данное приложение отсутствует в вашей сборке, его можно без лишних сложностей установить. И на это способен встроенный менеджер пакетов (apt-get в дистрибутивах Debian и Ubuntu, yum в дистрибутивах RHEL, Fedora и CentOS).
В Debian и Ubuntu:
В RHEL, CentOS и Fedora:
Примеры интересного использования команды
Скорее всего, наиболее простым и органичным путем изучения возможностей grep является практика. Потому мы советуем опробовать самые распространенные примеры.
Поиск необходимых файлов
Допустим, что вы установили на свой ПК популярный дистрибутив Ubuntu. И в дальнейшем планируете добавить в библиотеку Python определенные скрипты. С другой стороны, на веб-сайте с необходимыми материалами указано, что они есть для разных версий языка программирования Python. Тогда как вы не знаете точно, какая именно версия присутствует в вашей версии Ubuntu. А также — какие дополнительные модули идут в комплекте. Для выяснения таких подробностей можно использовать следующую команду:
Пример вывода команды:
Прежде всего остального, команда dpkg -l выводит на экран установленные пакеты с расширением *.deb. Результат вывода с помощью символа «|» передается по конвейеру grep -i python. При этом флаг -i позволяет команде не обращать внимания на регистр. Стоит отметить, что команды Linux вообще и grep в частности чувствительны к нему. В целом, стоит выработать в себе привычку к использованию флага -i, если цель поиска, конечно, не указывается более конкретно.
Фильтрация найденных командой grep файлов
Помимо всего прочего, команда grep предназначена для фильтрации результатов поиска внутри одного или нескольких файлов. Например, в том случае, если у ваш веб-сервер Apache испытывает проблемы. И вы решили обратиться на форум в Интернете для поиска возможных вариантов решения. Предположим, что члены сообщества посоветовали вам показать им содержимое файла /etc/apache2/sites-available/default-ssl. Однако данный файл содержит помимо всего прочего и закомментированные строки. К счастью, с нашей командой их можно отфильтровать:
Стоит отметить, что флаг -v предназначен для того, чтобы выводить на экран противоположный результат фильтрации. Прежде всего, применительно к нашему примеру будут выведены те строки, которые не соответствуют выражению “#” (закомментированные).
Обнаружение всех файлов с расширением .mp3
Команда grep незаменима в случае фильтрации результатов из stdout (потока №1). Допустим, на вашем ПК имеется каталог, содержащий множество музыкальных файлов, соответствующих различным форматам. И по какой-то причине вам понадобилось вывести список всех файлов с расширением *.mp3. Которые помимо всего прочего созданы исполнителем ABC и не являются ремиксами. В результате можно посоветовать использовать команду find, дополненную несколькими конструкциями с grep:
Поиском и выводом всех файлов, имеющих расширение *.mp3 занимается команда find. После чего через конвейер он передается сначала команде grep с флагом -i (проверяет наличие имени исполнителя «ABC»). После чего следующая по конвейеру команда grep с флагами -vi отсеивает из вывода результаты, содержащие слово «remix».
Отображение строк до или после строки с результатом поиска
Стоит упомянуть еще несколько флагов — -A и -B. Прежде всего, их назначение состоит в том, чтобы выводить совпадающую строку и указанное число соседних строк. А именно — находящихся перед или после найденного результата. Наверное, проще всего запомнить их назначение так:
- -A — от слова «after»;
- -B —от слова «before».
Пример использования флагов -A и -B:
Выведение заданного числа всех соседних строк
Скорее всего, более удобен флаг -C для команды grep. Вместо того, чтобы проверять и выводить строки, которые появляются только до или только после нужного результата, он позволяет вести поиск в обоих направлениях:
Подсчет числа строк, содержащих искомое выражение
Безусловно, команда Grep способна и просто посчитать количество совпадений с заданным выражением:
Указание номера искомой строки в файле
Дополнительный флаг -n для команды grep должен быть хорошо знаком программистам и тестировщикам программного обеспечения. С его помощью можно не только вывести нужные вам строки. Но также и увидеть их номера в указанном файле. Стоит отметить, что нумерация в данном случае ведется с единицы.
Рекурсивный поиск строки по всем каталогам
Предположим, что вам необходимо найти все вложения указанного выражения в текущем каталоге с его подкаталогами. Для этого достаточно всего лишь добавить флаг -r, запускающий рекурсивный поиск:
Выведение точного вхождения выражения как отдельного слова
Стоит отметить, что в команде grep предусмотрен специальный флаг -w. Который позволяет найти строку, в которой искомое выражение присутствует в виде отдельного слова:
С другой стороны, частичное соответствие не будет приводить к выводу того же результата. То есть, следующий пример приведет к иному выводу на экран:
Совпадения в архивах Gzip
Gzip (GNU Zip) — это популярное в среде пользователей Linux приложение. Которое предназначено для сжатия и декомпрессии файлов по алгоритму Deflate. К счастью, существует техническая возможность осуществлять поиск по таким сжатым архивам. Прежде всего, для этого нужно воспользоваться командой zgrep. К слову, во всем остальном она действует точно так же, как и обычная команда grep:
Соответствие более сложному регулярному выражению в файлах
Egrep — это еще одна родственная команда с дополнительными возможностями. В частности, с ее помощью можно вести поиск расширенных глобальных регулярных выражений. В частности, вести поиск можно с использованием метасимволов — +? | или ().
Рекомендуется к прочтению: какая разница между Grep, Egrep и Fgrep в Linux?
Команда egrep незаменима при попытке найти что-то в исходном коде. Стоит отметить, что функции данной команды можно использовать и в обычном варианте grep. Для этого можно воспользоваться флагом -E:
Выявление целой строки, соответствующей выражению
Еще одна производная команда — fgrep — выводит строку целиком, если она полностью соответствует искомому шаблону. Как и в примерах выше, аналогичный результат даст команда grep с флагом -F. При использовании флага -f команда fgrep будет брать искомые шаблоны из заданного файла и искать их в другом файле:
Выводы
Конечно, возможности команды grep намного шире, чем можно решить, изучив приведенные примеры. Помимо всего прочего, grep может стать основой для написания сложных скриптов (сценариев оболочки) и заданий для cron.
Будьте изобретательны, экспериментируйте с примерами применения со страниц нашего руководства! И придумывайте выражения для 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.