Есть ли у вас файл данных или набор данных, из которого вы хотите извлечь данные на основе критерия? Что ж, на помощь могут прийти регулярные выражения. В этой статье я выделю список шагов, которые я использовал для создания регулярных выражений для извлечения имен пакетов «KDE» из выходных данных команды поиска по запросу Pacman, которые были сохранены в файле.

KDE — это ключевое слово для поиска, которое я использовал. Он связан со средой рабочего стола Plasma. Pacman — менеджер пакетов Linux.

Содержание статьи

  1. Справочная информация: Причина, по которой я решил использовать регулярное выражение.
  2. Процедура: Разработка регулярного выражения.
  3. Результаты: окончательное регулярное выражение.
  4. Дальнейшее изучение. Рекомендуемые ресурсы для личного изучения.

Фон

Я выполнял очистку системы с помощью Pacman, популярного менеджера пакетов в Arch Linux. Я запустил следующий поисковый запрос Pacman:

pacman -Qs KDE

Команда напечатала следующее в стандартном выводе

В выводе указано больше, чем просто имена пакетов. Он также содержал номера версий и описания пакетов. Мне нужны были только имена пакетов, чтобы можно было выполнить над ними общую команду.

Используя регулярное выражение, я мог отфильтровать имена пакетов из вывода. Поэтому я разработал регулярное выражение.

Процедура

Я систематически определил важные особенности. Это помогло мне придумать регулярное выражение. Я достиг этого, изучив выходные данные команды поиска. Я отметил следующее:

Символы в именах пакетов

  1. Строчный алфавит: [a-z]
  2. Прописной алфавит: [a-zA-Z]
  3. Цифры: [a-zA-Z0–9]
  4. Символ «-»: [a-zA-Z0–9-]

Результирующее регулярное выражение: [a-zA-Z0–9-]

Квадратные скобки «[]» используются для создания групп, а «-» используются для создания списка диапазона.

Длина имени пакета

Имя пакета не может содержать 0 символов. Поэтому я использовал «+» вместо «*».

Результирующее регулярное выражение: [a-zA-Z0–9-]+

Однако минимальное количество символов, разрешенное для пакета, не равно одному. Использование «+» вместо проведения дополнительных исследований сократило затраченное время. Я отказался от этого уровня детализации в пользу экономии времени.

Имя пакета не находится ни в начале, ни в конце строки. Поэтому я не менял регулярное выражение.

Символы перед названием пакета

Строка «local/» появляется перед именем пакета. Однако в регулярном выражении требовался только «/».

Я использовал положительный взгляд на утверждение нулевой длины, (?‹=text): a, чтобы добавить эти знания в свое регулярное выражение.

Результирующее регулярное выражение: (?≤=/)[a-zA-Z0–9-]+

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

Полученные результаты

Используя системный подход, я придумал следующее регулярное выражение: (?≤=/)[a-zA-Z0–9-]+

Используя команду grep и параметр, совместимый с Perl, я запустил регулярное выражение:

grep -Po "(?≤=/)[a-zA-Z0–9-]+" kde_packages.txt

Результат стандартного вывода:

Сгенерированное регулярное выражение является регулярным выражением, совместимым с Perl. Это не будет работать с расширенным и базовым регулярным выражением. (Я попробовал это сделать. По этим двум вариантам существует документация POSIX.)

Другие варианты использования

Используя регулярные выражения, я извлек имена пакетов из выходного списка с помощью локального поискового запроса Pacman, хранящегося в файле. К этому моменту вы познакомились с возможным вариантом использования регулярного выражения.

В каких еще случаях могут пригодиться регулярные выражения? Ищите статьи и анализируйте свои рабочие процессы. Вы можете найти места, где этот инструмент будет полезен.

Дальнейшее исследование

Хотите узнать больше о регулярных выражениях? Посетите этот полезный ресурс: