Есть ли у вас файл данных или набор данных, из которого вы хотите извлечь данные на основе критерия? Что ж, на помощь могут прийти регулярные выражения. В этой статье я выделю список шагов, которые я использовал для создания регулярных выражений для извлечения имен пакетов «KDE» из выходных данных команды поиска по запросу Pacman, которые были сохранены в файле.
KDE — это ключевое слово для поиска, которое я использовал. Он связан со средой рабочего стола Plasma. Pacman — менеджер пакетов Linux.
Содержание статьи
- Справочная информация: Причина, по которой я решил использовать регулярное выражение.
- Процедура: Разработка регулярного выражения.
- Результаты: окончательное регулярное выражение.
- Дальнейшее изучение. Рекомендуемые ресурсы для личного изучения.
Фон
Я выполнял очистку системы с помощью Pacman, популярного менеджера пакетов в Arch Linux. Я запустил следующий поисковый запрос Pacman:
pacman -Qs KDE
Команда напечатала следующее в стандартном выводе
В выводе указано больше, чем просто имена пакетов. Он также содержал номера версий и описания пакетов. Мне нужны были только имена пакетов, чтобы можно было выполнить над ними общую команду.
Используя регулярное выражение, я мог отфильтровать имена пакетов из вывода. Поэтому я разработал регулярное выражение.
Процедура
Я систематически определил важные особенности. Это помогло мне придумать регулярное выражение. Я достиг этого, изучив выходные данные команды поиска. Я отметил следующее:
Символы в именах пакетов
- Строчный алфавит: [a-z]
- Прописной алфавит: [a-zA-Z]
- Цифры: [a-zA-Z0–9]
- Символ «-»: [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, хранящегося в файле. К этому моменту вы познакомились с возможным вариантом использования регулярного выражения.
В каких еще случаях могут пригодиться регулярные выражения? Ищите статьи и анализируйте свои рабочие процессы. Вы можете найти места, где этот инструмент будет полезен.
Дальнейшее исследование
Хотите узнать больше о регулярных выражениях? Посетите этот полезный ресурс: