Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Druk_ekz.docx
Скачиваний:
12
Добавлен:
17.09.2019
Размер:
457.69 Кб
Скачать

12. Групи та зворотні посилання. Приклади використання.

Групи(Круглі дужки) та зворотні посилання

До цього моменту ми зустрічалися із двома випадками використання круглих дужок: для обмеження зони дії конструкції вибору ( tr(a|e)y ) та групування символів для застосування квантифікаторів до них (наприклад, (from:)?sender@yandex.ru). Цими варіантами застосування не обмежуються можливості круглих дужок.

У більшості сучасних мовах програмування, круглі дужки вміють «запам’ятовувати» текст, який співпав з регулярним виразом що в них знаходиться. Ця можливість може бути корисною коли нам потрібно отримати результат який співпав лише з частиною регуляого виразу. Для цього нам потрібно відділити цю частину за допомогою круглих дужок.

Більшість програмних засобів підтримують механізм «зворотніх посилань». Якщо круглі дужки знайши співпадання із підвиразом що знаходиться всередині них, то спеціальний метасимвол «\1» представляє цей текст (яким би він не був на той момент) у подальші частині регулярного виразу. За допомогою механізму зворотніх посилань, ми можемо посилатися на текст що був співпавший із виразом у круглих дужках.

Ми також можемо використовувати декілька пар круглих дужок у наших регулярних виразах. В такому випадку посилання на співпавший з ними текст будуть мати вигляд «\1», «\2», «\3» і тд. Наприклад, у виразі «([0-9])([a-z])/1/2» метасимвол /1 буде посилатися на текст співпавший з першими круглими дужками, а метасимвол /2 буде посилатися на на текст співпавший з другими круглими дужками.

Механізм зворотніх посилань зручно використовувати коли ми ще не знаємо що саме будемо шукати. Наприклад, вираз «([a-z])/1» треба розуміти наступним чином: «якщо знайшов букву в діапазоні від a до z, пошукай її знову».

Екранування

Яким чином додати до шуканих символів символ, який зазвичай інтерпритується як метасимвол? Наприклад, в процесі пошуку доменного імені new.ukraine.com по регулярному виразу «www.example.com», в результати пошуку потраплять рядки типу newssukrainescom. Пригадайте що метасимвол «.» співпадає із будь-яким символом.

Метапослідовність яка співпадає із символом крапки, склаєтьс із звичайної крапки і передуючого їй префікса «\» (зворотній слеш). Послідовність «\.» називається екранованою (escaped) крапкою. Для того щоб побудувати правильний регулярний вираз для пошуку доменного імені, усі крапки що входять у назву домена, повинні бути екрановані (наприклад, new\.ukraine\.com).Екранування можна застосовувати для будь-яких метасимволів.

  1. Застосування регулярних виразів для обробки тексту. Потоковий текстовий редактор sed. Опис опцій, адресація приклади.

Sed -- это неинтерактивный строчный редактор. Он принимает текст либо с устройства stdin, либо из текстового файла, выполняет некоторые операции над строками и затем выводит результат на устройство stdout или в файл. Как правило, в сценариях, sed используется в конвейерной обработке данных, совместно с другими командами и утилитами.

Sed определяет, по заданному адресному пространству, над какими строками следует выполнить операции. [1] Адресное пространство строк задается либо их порядковыми номерами, либо шаблоном. Например, команда 3d заставит sed удалить третью строку, а команда /windows/d означает, что все строки, содержащие "windows", должны быть удалены.

Полезен для:

  • Редактирования очень больших файлов;

  • Редактирования файлов любой величины, если последовательность команд редактирования является слишком длинной и сложной и, следовательно, неудобной для выполнения интерактивного редактирования.

  • Выполнения множества раз одной и той же функции редактирования.

  • SED копирует строку из input (стандартный или указываемый набор файлов) в PATTERN SPACE (некоторая область), и к этой строке применяет все команды, адреса которых попадают в PATTERN SPACE . ЗатемPATTERN SPACE копируется в output . (Фактически в PATTERN SPACE находится одна строка, за исключением команды N , см.4. Функции SED )

  • Формат:

  • SED [-n] [-e script] [-f sfile] [files]

  • script - набор команд редактирования SED , который может содержать до 200 команд или до 10000 байт.

  • sfile - файл со скриптом SED .

  • files - файлы, предназначенные для SED -редактирования.

  • -n - указывает, что в output выводятся не все строки, но только те, к которым применялась команда p. (См. 4.Функции SED . и 5.Функция контекстной замены.)

  • Флаг -e может быть опущен, если он присутствует один.

  • Команда SED :

  • [address[,address]] function [arguments]

  • адрес адрес функция аргументы

Доступны следующие опции: -E Интерпретирует регулярные выражения как расширенные (современные), регулярные выражения чаще, чем основные регулярные выражения. Страница документации на  re_format(7) полностью описывает оба формата. -a Файлы перечисленные как параметры функции ``w'' создаются (или удаляются) прежде, чем начнется процесс по умолчанию. Опция -a  заставляет sed откладывать открытие каждого файла до тех пор, пока команда содержащая связную функцию ``w'' не применяется к строке ввода. -e command Добавляет команды редактирования определенные аргументом command, к списку команд -f command_file Добавляет команды редактирования найденные в файле command_file к списку команд. Каждая команда редактирования должна быть перечислена в отдельной строке. -i extension Редактирует файлы с замещением, сохраняя резервную копию с указанным расширением. Если расширение не указано (нулевой длины), резервная копия не будет сохраняться. Не рекомендуется присваивать нулевое расширение к замещаемым файлам, поскольку вы рискуете полностью или частично повредить файл, когда место на диске исчерпано. -l создает буфер выходных строк -n по умолчанию, каждая линия ввода выводиться на стандартный вывод, после  того как были применены все команды. Опция -n отменяет это поведение.

Адресация в командах SED

С помощью адресации происходит отбор строк для редактирования.

Адрес:

  • Десятичный номер строки;

  • $ - последняя строка input ;

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

Если адреса не указаны, то команда применяется ко всем pattern space;

Если присутствует один адрес, то команда применяется ко всем тем pattern space, куда попадает этот адрес;

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

Sed использует ключ -e для того, чтобы определить, что следующая строка является инструкцией, или набором инструкций, редактирования. Если инструкция является единственной, то использование этого ключа не является обязательным.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]