Для работы с Linux дистрибутивами в основном используют терминал или же консоль, которые требуют знания основных команд для полноценной работы со средой. Почти для каждой задачи существует утилита, которая выполняет в заранее определенные функции. Поиск файлов и шаблонов текста в них не стал исключением, две основные утилиты, которые набрали популярность и по сей день используются в работе: find и grep. Если find используется только для поиска пути файлов по их свойствам, то grep в дополнении выполняет поиск по их содержимому. В материале рассмотрим ее синтаксис, основные опции и примеры использования в работе!
Что такое GREP и как его найти?
Как уже упоминалось выше, GREP представляет собой многофункциональную утилиту Linux для поиска файлов и текста по шаблонам, регулярным выражениям.
В основном, на многих дистрибутивах уже существует предустановленный с ней пакет. Для того чтобы проверить наличие его на вашей машине введите команду:
Если вывод выглядит следующим образом, то пакет уже установлен, иначе установите его через ваш пакетный менеджер, для Ubuntu, Debian и apt-подобных:
Для RPM-подобных систем, команда для установки пакета м его зависимостями может выглядеть следующим образом:
После того, как мы убедились в том, что пакет был установлен перейдем к рассмотрению синтаксиса утилиты и ее опций!
Синтаксис и опции
Для поиска используется сама команда grep, а так же основные опции, которые и образуют синтаксис команды:
Для простого поиска по шаблону в файле используем команду:
В заданном файле был найден и подсвечен запрашиваемый шаблон, в данном случае использовались два основных блока синтаксиса [pattern] и [path to file] без [options]. Но что если, нам нужно выполнить более сложный поиск с учетом нескольких условий? Для этого и существует целый список опций [options], рассмотрим основные и приведем пример их использования:
Настройка сопоставления шаблонов:
-E, –extended-regexp Расширенные регулярки для шаблонов;
-G, –basic-regexp Стандартные регулярки для шаблонов;
-P, –perl-regexp Использование регулярки-perl.
Источники шаблонов:
-e, –regexp= [шаблон] позволяет задать паттерн напрямую;
-f, –file=[файл] позволяет задать паттерн напрямую.
Управление регистром:
-i, –ignore-case Без учета регистра про поиске соответствия;
–no-ignore-case C учетом регистра про поиске соответствия, работает по-умолчанию.
Специальные режимы сопоставления:
-w, –word-regexp Учитывать при сопоставлении, только целые слова;
-x, –line-regexp Учитывать при сопоставлении, только целые строки.
Альтернативное окончание строки:
-z, –null-data Считать конец строки нулевым байтом вместо символа новой строки.
Все эти группы опций относятся к конфигурации способа сопоставления шаблона с массивом данных. Для чуть более сложного поиска, чем в первом примере, будем использовать обычные регулярные выражения. Сейчас остальные опции не понадобятся. Укажем тот же шаблон:
В тексте присутствует два слова Alex и Alex’s parents, суть работы регулярок заключается в том что они разбивают данные на символы и ищут паттерны. Поэтому при поиске grep -e ‘named Alex’ /home/kk.txt будет два совпадения Alex и Alexes parents. Как найти конкретное слово или строку, чтобы не попадали иные значения? Для этого используем опцию -w, она позволит разбить предложения по словам, а не по символам в них:
Как видим в примере не было выделено слово Alexes, так как разбиение было по словам.
Рекурсивный поиск grep
Но что если файл не один и необходимо найти совпадение по множеству файлов в одной директории? Для этого в grep существует опция -r, позволяющая определить папку для поиска по содержимому. Реализуем запрос имени нашего пользователя в логах:
Все действия были выполнены в среде облачного сервера от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать:
Потребуется некоторое время для развертывания серверных мощностей. После чего вы можете подключиться любым из удобных способов. На основе предлагаемы VPS и VDS серверов, так же можно развернуть уже свою виртуальную инфраструктуру.
Фильтрация вывода команд
Очень часто в Linux вывод команд в терминал громаден или содержит много не нужной информации, для этого используем pipe или же перенаправление в уже утилиту grep. Выглядит это так, предположим нам необходимо проверить установлен ли пакет NetworkManager для управления сетями:
Если вы используете apt-менеджер, замените dnf в команде:
Работа с дистрибутивами Linux требует уверенного владения терминалом и знания основных команд. Утилиты find и grep занимают важное место в арсенале инструментов, обеспечивая эффективный поиск файлов и их содержимого.