Регулярные выражения для фильтрации текста в AWK

Регулярные выражения для фильтрации текста в AWK

Рубрики:

Linux, Терминал Linux

Метки:

,

Добро пожаловать во вторую из статей о языке AWK! Скриптовый язык AWK — это удобный и мощный инструмент для обработки текстовых данных в терминале Linux. В этой статье мы рассмотрим основы регулярных выражений в языке сценариев AWK и покажем, как использовать их для фильтрации и обработки текста.

Также советуем посмотреть первую статью Введение в AWK: руководство для начинающих.

Содержание:

  1. Что такое регулярное выражение
    1. Символы в регулярных выражениях
  2. Как фильтровать текст с помощью AWK
    1. Вывод содержимого файла
    2. Поиск строки по шаблону
    3. Поиск по шаблону с метасимволом «.»
    4. Использование метасимвола «*» в шаблоне AWK
    5. Использование AWK с набором символов []
    6. Поиск по шаблону с метасимволом «^»
    7. Поиск по шаблону с метасимволом «$»
    8. Использование метасимвола «\» в шаблоне AWK
  3. Выводы

Что такое регулярное выражение

Регулярное выражение — это шаблон, описывающий некоторый набор символов. Этот шаблон нужен для поиска, замены или извлечения определенных частей текста. Регулярные выражения часто используются в программировании, текстовых редакторах, командной строке и других приложениях для работы с текстом. В AWK эти шаблоны могут применяться для фильтрации содержимого в больших файлах и потоках данных. Скриптовый язык также поддерживает расширенные регулярные выражения (Extended Regular Expressions), которые имеют больше возможностей, чем обычные регулярные выражения.

Символы в регулярных выражениях

Для создания эффективных и корректных шаблонов используются специальные символы. Их все можно разделить на несколько групп:

  • литералы — обычные символы (a, b, c, 1, 2, 3 и так далее);
  • метасимволы — специальные символы, используемые для определенных задач (., * и другие);
  • специальные последовательности — комбинации символов для форматирования текста (\d, \s);
  • классы символов — множества и диапазоны символов с определенными свойствами (например, [abc] для представления любого из символов a, bc, или [0-9] для представления любой цифры);
  • обратные ссылки — используются для сопоставления подстрок, соответствующих определенным выражениям (например, (.*)\1 для поиска повторяющихся подстрок).

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

  • . — соответствует любому одиночному символу, кроме символа новой строки (\n);
  • [] — определяет класс символов, соответствующих любому из символов в квадратных скобках;
  • [^] — определяет класс символов, не соответствующих символам в квадратных скобках;
  • ^ — ищет шаблон в начале строки;
  • $ — ищет шаблон в конце строки;
  • * — соответствует предыдущему символу 0 или более раз;
  • {m,n} — соответствует предыдущему символу от m до n раз;
  • () — определяет группу символов, которые могут быть использованы для задания альтернативы, повторения;
  • | — соответствует альтернативе между символами слева и справа от этого символа.

Как фильтровать текст с помощью AWK

Прежде чем перейти к практическим примерам, рассмотрим синтаксис, который будем использовать:

 

Здесь /pattern/ представляет регулярное выражение, которому должна соответствовать строка в файле, а { action } — команды, которые нужно выполнить для каждой строки, соответствующей шаблону. Если шаблон не указан, то команды будут выполнены для всех строк в файле.

Вывод содержимого файла

Самый простой пример использования регулярных выражений — вывод всех строк файла. К примеру, отобразим на экране все строки из файла /etc/hosts:

 

print hosts

Данный код использует символ регулярного выражения //, которое соответствует любой строке, и команду print, которая выводит эти строки на экран.

Поиск строки по шаблону

Возможности скриптового языка AWK позволяют искать строки по указанному шаблону. Например, выведем на экран строки, которые содержат в себе слово localhost:

 

print localhost

Регулярное выражение /localhost/ является шаблоном поиска, который ищет все строки в файле, содержащие указанную подстроку.

Затем команда awk выполняет блок кода {print}, который просто передает найденные строки в поток 1 (stdout — cтандартный вывод) командной оболочки Linux.

Поиск по шаблону с метасимволом «.»

Метасимвол . представляет любой одиночный символ, кроме символа новой строки. Например, регулярное выражение /l.c/ будет соответствовать строкам, содержащим loc, lac, lxc и т. п. Давайте, найдем в файле /etc/hosts строки, которые содержат регулярное выражение /l.c/:

 

print lc awk

Использование метасимвола «*» в шаблоне AWK

Метасимвол * используется для описания повторений 0 или более раз предыдущего символа или группы символов. Например, регулярное выражение l*c будет соответствовать строкам, начинающимся с символа l, за которым следует 0 или более этого или других символов. Например, lc, lalrc, lldelc и так далее. Рассмотрим это на практике:

 

print-lc регулярные выражения
В данном коде регулярное выражение /l*c/ ищет строки, содержащие букву l, затем любое количество любых символов и, наконец, букву c. Например, в файле /etc/hosts могут быть строки, содержащие слова local или localhost.

Использование AWK с набором символов []

В регулярных выражениях квадратные скобки [] используются для определения символьного класса, т. е. множества символов, из которых должен быть выбран один. Внутри скобок можно перечислить сразу несколько символов, например [abc] означает выбор из символов a, b или c. Поиск будет выполнен во всех строках, в которых присутствует хотя бы один из символов из заданного набора.

Допустим, нам нужно вывести на экран все строки файла, которые содержат хоть один символ из [al1]:

 

print al1 awk

Также набор символов можно использовать и таким образом — выведем строки, которые содержат подстроку Se или se.

 

Sse print

Еще один способ использования квадратных скобок в регулярных выражениях  [] — указание диапазонов символов, обозначаемых через дефис. Например,[0-9] означает выбор цифр из указанного промежутка. Давайте отобразим строки, которые имеют цифры из этого интервала:

 

print 0-9

Поиск по шаблону с метасимволом «^»

Метасимвол ^ в регулярных выражениях нужен для поиска соответствия в начале строки. То есть поиск будет осуществляться только в начале каждой строки. Допустим, что нам требуется вывести на экран все строки файла, которые начинаются с символов ff:

 

print-ff

Поиск по шаблону с метасимволом «$»

Метасимвол $ применяется для обозначения конца строки. То есть, он имеет значение противоположное символу ^ из предыдущего примера. Метасимвол $ указывает на то, что искомый шаблон должен находиться в конце строки. К примеру, отобразим на экране терминала все строки, которые заканчиваются на символ s:

 

print end with s

Использование метасимвола «\» в шаблоне AWK

Метасимвол \ в шаблоне AWK используется для экранирования следующего символа, чтобы использовать другой метасимвол в его буквальном значении (как простой символ). Например, для поиска точки в тексте ее нужно экранировать, чтобы язык сценариев не интерпретировал ее как метасимвол. Например, у нас есть файл 123.txt и мы хотим найти строки, которые содержат $10. Так как $ — это метасимвол, его нужно экранировать:

 

print 123

Выводы

Во второй статье из цикла о сценарном языке AWK были рассмотрены основы работы с регулярными выражениями, такие как использование шаблонов для поиска и фильтрации текста. мы изучили метасимволы для обозначения одного символа, нескольких символов, а также для поиска символов в определенном диапазоне. Важно понимать, что регулярные выражения являются мощным инструментом для работы с текстом и позволяют обрабатывать данные в больших объемах.

Спасибо за время, уделенное прочтению статьи!

Если возникли вопросы — задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Ciscoкурсы по кибербезопасностиполный курс по кибербезопасностикурсы DevNet / DevOps (программируемые системы) от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Рубрики:

Linux, Терминал Linux

Метки:

,

Больше похожих постов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения


Поиск по сайту
Лучшее
Популярное
Рубрики
Меню