Добро пожаловать во вторую из статей о языке AWK! Скриптовый язык AWK — это удобный и мощный инструмент для обработки текстовых данных в терминале Linux. В этой статье мы рассмотрим основы регулярных выражений в языке сценариев AWK и покажем, как использовать их для фильтрации и обработки текста.
Также советуем посмотреть первую статью Введение в AWK: руководство для начинающих.
Содержание:
Что такое регулярное выражение
Регулярное выражение — это шаблон, описывающий некоторый набор символов. Этот шаблон нужен для поиска, замены или извлечения определенных частей текста. Регулярные выражения часто используются в программировании, текстовых редакторах, командной строке и других приложениях для работы с текстом. В AWK эти шаблоны могут применяться для фильтрации содержимого в больших файлах и потоках данных. Скриптовый язык также поддерживает расширенные регулярные выражения (Extended Regular Expressions), которые имеют больше возможностей, чем обычные регулярные выражения.
Символы в регулярных выражениях
Для создания эффективных и корректных шаблонов используются специальные символы. Их все можно разделить на несколько групп:
- литералы — обычные символы (
a,b,c,1,2,3и так далее); - метасимволы — специальные символы, используемые для определенных задач (
.,*и другие); - специальные последовательности — комбинации символов для форматирования текста (
\d,\s); - классы символов — множества и диапазоны символов с определенными свойствами (например,
[abc]для представления любого из символовa,b,c, или[0-9]для представления любой цифры); - обратные ссылки — используются для сопоставления подстрок, соответствующих определенным выражениям (например,
(.*)\1для поиска повторяющихся подстрок).
Предлагаем Вам более подробно остановиться на метасимволах, так как, зачастую, именно их чаще всего используют в регулярных выражениях. Чаще всего встречаются следующие метасимволы:
.— соответствует любому одиночному символу, кроме символа новой строки (\n);[]— определяет класс символов, соответствующих любому из символов в квадратных скобках;[^]— определяет класс символов, не соответствующих символам в квадратных скобках;^— ищет шаблон в начале строки;$— ищет шаблон в конце строки;*— соответствует предыдущему символу 0 или более раз;{m,n}— соответствует предыдущему символу отmдоnраз;()— определяет группу символов, которые могут быть использованы для задания альтернативы, повторения;|— соответствует альтернативе между символами слева и справа от этого символа.
Как фильтровать текст с помощью AWK
Прежде чем перейти к практическим примерам, рассмотрим синтаксис, который будем использовать:
Здесь /pattern/ представляет регулярное выражение, которому должна соответствовать строка в файле, а { action } — команды, которые нужно выполнить для каждой строки, соответствующей шаблону. Если шаблон не указан, то команды будут выполнены для всех строк в файле.
Вывод содержимого файла
Самый простой пример использования регулярных выражений — вывод всех строк файла. К примеру, отобразим на экране все строки из файла /etc/hosts:
Данный код использует символ регулярного выражения //, которое соответствует любой строке, и команду print, которая выводит эти строки на экран.
Поиск строки по шаблону
Возможности скриптового языка AWK позволяют искать строки по указанному шаблону. Например, выведем на экран строки, которые содержат в себе слово localhost:
Регулярное выражение /localhost/ является шаблоном поиска, который ищет все строки в файле, содержащие указанную подстроку.
Затем команда awk выполняет блок кода {print}, который просто передает найденные строки в поток 1 (stdout — cтандартный вывод) командной оболочки Linux.
Поиск по шаблону с метасимволом «.»
Метасимвол . представляет любой одиночный символ, кроме символа новой строки. Например, регулярное выражение /l.c/ будет соответствовать строкам, содержащим loc, lac, lxc и т. п. Давайте, найдем в файле /etc/hosts строки, которые содержат регулярное выражение /l.c/:
Использование метасимвола «*» в шаблоне AWK
Метасимвол * используется для описания повторений 0 или более раз предыдущего символа или группы символов. Например, регулярное выражение l*c будет соответствовать строкам, начинающимся с символа l, за которым следует 0 или более этого или других символов. Например, lc, lalrc, lldelc и так далее. Рассмотрим это на практике:

В данном коде регулярное выражение /l*c/ ищет строки, содержащие букву l, затем любое количество любых символов и, наконец, букву c. Например, в файле /etc/hosts могут быть строки, содержащие слова local или localhost.
Использование AWK с набором символов []
В регулярных выражениях квадратные скобки [] используются для определения символьного класса, т. е. множества символов, из которых должен быть выбран один. Внутри скобок можно перечислить сразу несколько символов, например [abc] означает выбор из символов a, b или c. Поиск будет выполнен во всех строках, в которых присутствует хотя бы один из символов из заданного набора.
Допустим, нам нужно вывести на экран все строки файла, которые содержат хоть один символ из [al1]:
Также набор символов можно использовать и таким образом — выведем строки, которые содержат подстроку Se или se.
Еще один способ использования квадратных скобок в регулярных выражениях [] — указание диапазонов символов, обозначаемых через дефис. Например,[0-9] означает выбор цифр из указанного промежутка. Давайте отобразим строки, которые имеют цифры из этого интервала:
Поиск по шаблону с метасимволом «^»
Метасимвол ^ в регулярных выражениях нужен для поиска соответствия в начале строки. То есть поиск будет осуществляться только в начале каждой строки. Допустим, что нам требуется вывести на экран все строки файла, которые начинаются с символов ff:
Поиск по шаблону с метасимволом «$»
Метасимвол $ применяется для обозначения конца строки. То есть, он имеет значение противоположное символу ^ из предыдущего примера. Метасимвол $ указывает на то, что искомый шаблон должен находиться в конце строки. К примеру, отобразим на экране терминала все строки, которые заканчиваются на символ s:
Использование метасимвола «\» в шаблоне AWK
Метасимвол \ в шаблоне AWK используется для экранирования следующего символа, чтобы использовать другой метасимвол в его буквальном значении (как простой символ). Например, для поиска точки в тексте ее нужно экранировать, чтобы язык сценариев не интерпретировал ее как метасимвол. Например, у нас есть файл 123.txt и мы хотим найти строки, которые содержат $10. Так как $ — это метасимвол, его нужно экранировать:
Выводы
Во второй статье из цикла о сценарном языке AWK были рассмотрены основы работы с регулярными выражениями, такие как использование шаблонов для поиска и фильтрации текста. мы изучили метасимволы для обозначения одного символа, нескольких символов, а также для поиска символов в определенном диапазоне. Важно понимать, что регулярные выражения являются мощным инструментом для работы с текстом и позволяют обрабатывать данные в больших объемах.
Спасибо за время, уделенное прочтению статьи!
Если возникли вопросы — задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы 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.
































