Добро пожаловать во вторую из статей о языке 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.