Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

10.9. Регулярные выражения

awk обеспечивает более мощные шаблоны для поиска строки символов, чем сравнение. Такие шаблоны называются регулярными выражениями. Простейшим регулярным выражением является строка символов, обрамленная знаками "/". Например:

	/Asia/

Эта программа печатает все записи, которые содержат подстроку Asia (запись, содержащая Asia как часть длинной строки, подобной Asian или Pan-Asiatic, также печатается).

Чтобы ограничить поиск только для специального поля, вы можете использовать операторы ~(входит) и !~(не входит). Программа:

	$4 ~ /Asia/ { print $1 }
печатает первое поле всех тех строк, в которых четвертое поле - Asia, в то время как программа:
	$4 !~ /Asia/ { print $1 }
печатает первое поле всех тех строк, в которых четвертое поле - не Asia.

В регулярном выражении могут использоваться метасимволы:

	\, ^, $, ., [, ], *, ?, (, ), |
которые подобны метасимволам, используемым в shell. Например, метасимволы "^" и "$" осуществляют поиск соответственно начала и конца строки, а метасимвол "." ищет одиночный символ. Например:
	/^.$/
просматривает все записи для поиска записи, состоящей из одного символа.

Если группа символов заключена в квадратные скобки, то это означает поиск одного символа из этой группы. Например, /[ABC]/ - осуществляет поиск либо символа "A", либо "B", либо "C". Границы букв или цифр могут быть обозначены внутри квадратных скобок:

	/[a-zA-Z]/
Если первым символом после "[" является символ "^", то это означает: любой символ, не входящий в набор. Например:
	/[^a-zA-Z]/
означает поиск любого символа, кроме буквы.

Символ "+" означает "один или больше". Например, программа:

	$2 !~ /^[0-9]+$/
печатает все записи, в которых второе поле не является строкой из одной или более цифр. (^ - начало строки, [0-9]+ - одна или более цифр, $ -конец строки).

Круглые скобки используются для группирования символов, а символ | для указания альтернативы. Программа:

	/(apple|cherry) (pie|tart)/
осуществляет поиск строк, содержащих одну из 4-х подстрок:
        apple pie
        apple tart
        cherry pie
        cherry tart 

Чтобы отменить специальное значение метасимвола, поставьте знак "\" перед ним. Например:

	/b\$/
печатает все строки, содержащие символ "b" и следующий за ним знак "$".

В дополнение к распознаваемым метасимволам, awk распознает следующие последовательности языка программирования Си внутри регулярных выражений и строк:
\b - возврат
\f - перевод формата
\n - новая строка
\r - возврат каретки
\t - табуляция
\ddd - восьмиричное значение
\" - кавычки
\c - с

Например, чтобы напечатать все строки, содержащие табуляцию, воспользуйтесь программой:

	/\t/

awk интерпретирует любую строку или переменную справа от символа "~" или "!~" как регулярное выражение. Например, мы можем записать программу:

	$2 !~ /^[0-9]+$/
как
      BEGIN { digits = "^[0-9]+&" }
         $2 !~ digits 

Предположим, что нужно найти строку символов, подобную ^[0-9]+$. Если строка "^[0-9]+$" используется как регулярное выражение, появляются дополнительные знаки "\", которые защищают регулярное выражение. Это связано с тем, что первый уровень знаков "\" удаляется при синтаксическом анализе строки. Первый уровень "\" перед символом возвращает его специальное значение в регулярном выражении, второй нужен, чтобы защитить его в строке.

Например, нужно найти строки, содержащие "b" и следующий за ним знак "$". Регулярное выражение для этого шаблона:

	b\$

Чтобы создать строку для представления этого регулярного выражения, необходимо добавить еще один символ "\":

	"b\\$"

Следующие регулярные выражения попарно эквивалентны:

        x ~ "b\\$"      x ~ /b\$/
        x ~ "b\$"       x ~ /b$/
        x ~ "b$"        x ~ /b$/
        x ~ "\\t"       x ~ /\t/

Регулярные выражения и подстроки, поиск которых они осуществляют, приведены в табл. 22.

Унарные операции *, +, ? имеют наивысший приоритет, затем конкатенация и затем альтернативный выбор |.

Таблица 22
Регулярные выражения

Выражение Действие
с Любой, отличный от "с" мета-символ
Символ "с"
^ Начало строки
$ Конец строки
. Любой символ, кроме новой строки
[s] Любой символ из набора "s"
[^s] Любой символ, не входящий в набор "s"
r* Ноль или больше
r+ Один или больше
r? Ноль или один
(r) r
r1r2 Соединить r1 и r2
r1|r2 r1 или r2

Назад | Содержание | Вперед

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...