Компания ALT Linux
Опубликован: 14.12.2004 | Доступ: свободный | Студентов: 12288 / 1475 | Оценка: 4.19 / 3.84 | Длительность: 18:18:00
ISBN: 978-5-9556-0019-1
Лекция 14:

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

< Лекция 13 || Лекция 14: 12345 || Лекция 15 >
Аннотация: Регулярные выражения, их назначение и применение. Базовое и расширенное регулярное выражение. Утилиты, использующие регулярное выражение. Потоковый текстовый редактор sed.
Ключевые слова: human readable, Unix, текстовый формат данных, style, терминал, файл, строка, слово, символ конца строки, терминальная линия, ПО, поток, разделитель, shell, разбиение, сочетания, синтаксис, семантика, поиск, регулярное выражение, regular expression, специальный символ, Формальной грамматикой, анализ, regexp, подстрока, атомарное регулярное выражение, спецсимвол, множество, диапазон, составное регулярное выражение, натуральное число, операция группирования, повторитель, выражение, интервал, минимум, максимум, базовое регулярное выражение, расширенное регулярное выражение, именованное множество, пробел, CBA, позиционный оператор, параграф, syntax, word, класс, контекст, значение, правило "левый-длинный" (leftmost longest), leftmost longest, жадное регулярное выражение, нежадное регулярное выражение, однозначность результата, стандартный вывод, шаблон, утилита, параметр, ключ, CASE, команда, apropos, сценарий, полное имя, входное имя, MAX, поле, препроцессор, архив, backspace, POSIX, алфавит, программа, GNU, alt, perl, python, VIM, стиль регулярного выражения, операции, алгоритм, текстовый редактор, пользователь, операторы, on-the-fly, new, группа, место, входной, контекстный адрес, остаток, Дополнение, предпросмотр, lookahead, вывод, временный файл, editing, целый, AWK, язык программирования, Lisp

Текст

Одним из следствий У (точнее, правила human readable) в UNIX стало то, что все без исключения настройки системы и дополнительных служб, а также подавляющее большинство системных журналов и прочих хранилищ системной информации имеют текстовый формат. Это настолько бросается в глаза, что, наряду с интерфейсом командной строки, входит в понятие unix style. Даже если некоторые данные не содержатся в текстовом виде явно, всегда есть утилиты, выдающие их пользователю на терминал как текст.

Формально текстовый файл - это файл, разбитый на строки и слова, содержащий только печатные символы и символы конца строки. Таковы, как сказано в лекции 8, требования терминальной линии к передаваемой по ней информации: во-первых, некоторые символы (ascii-код которых меньше 32) считаются управляющими, во-вторых, поток байтов делится на строки при помощи символа конца строки (специальное обозначение - " \n ", ascii-код 12), в обработанном режиме именно строками система обменивается с пользователем, в-третьих, строка делится на слова с помощью символов- разделителей - пробелов и табуляций. По таким же правилам shell обрабатывает командную строку, однако разбиение на слова слегка усложняется из-за закавычивания. В языках программирования могут быть еще более сложные правила разбиения строк на слова: например, могут различаться идентификаторы, ключевые слова и знаки операций; разделитель между словами разного типа может быть необязательным и т. д.

Вообще, каждый тип текстового файла имеет свои представления о лексике (правилах построения слов ), синтаксисе (правилах сочетания слов ), семантике (правилах интерпретации текста). Представления эти, будучи формализованными, называются языком и задаются прикладной областью, а реализуются программой, которая будет разбирать содержимое файла. Неформальное требование к текстовому файлу - чтобы он был понятен, или, согласно И, потенциально понятен человеку. Для этого все слова, встречающиеся в файле, должны обозначать объекты, действия или отношения в прикладной области, а лексика, синтаксис и семантика образующегося языка должны быть понятны человеку. Собрав воедино все тексты, задающие решение пользовательской задачи и все нетекстовые исходные данные, мы получим главный элемент проективной системы - проект. Так, проект программного продукта - это исходные тексты программы на языке программирования и, возможно, данные, не влияющие на работу программы, - картинки, звуки и т. п.

В отличие от текста на естественном языке (например, на русском), тексты, составляющие различные проекты в UNIX, строго структурированы. Языки этих текстов имеют четкий синтаксис и довольно простую лексическую организацию. Если перед человеком стоит задача исправления проекта, для решения которой достаточно видоизменить имеющийся текст, а дописывать новые части проекта не надо, ее можно решать двумя способами: либо выбрасывать устаревшие куски и вписывать новые (что равносильно дописыванию), либо поручить эту работу роботу. Робот должен - на уровне, достаточном для данной работы, - разбираться в синтаксисе и лексике языка и иметь четкие инструкции, какие куски считать устаревшими и как их преобразовывать в новые.

Обработка текста

Иными словами, стандартная задача обработки текста состоит из поиска фрагмента текста заданной структуры и преобразования этого фрагмента согласно заданному алгоритму. Таким способом изменять проект зачастую гораздо быстрее и уж точно не в пример интереснее, чем механически выполнять работу, которую может сделать робот. Типичный пример выполнимой задачи - поиск определенного слова в заданном окружении и замена его на другое слово.

С задачей поиска помогает справиться мощный механизм представления структуры текста, называемый регулярным выражением (regular expression). Регулярное выражение - это строка, содержащая специальные символы, интерпретация которых такова, что одному регулярному выражению может соответствовать целый класс строк определенной структуры. С точки зрения области применения регулярное выражение напоминает шаблон, используемый в shell, однако возможностей у него намного больше. Термин "регулярное выражение" восходит к теории формальных языков и классификации формальных грамматик по Хомскому. Более чем подробный рассказ об этой теории, а также о методах синтаксического анализа см. в [ 24 ] .

Лексический анализ большинства языков в UNIX и большая часть синтаксического анализа делается именно на основе регулярных выражений. Поэтому инструмент анализа и преобразования текста, работающий с регулярными выражениями, во многих случаях может разобраться с упрощенным для решения частной задачи синтаксисом языка. Стоит заметить, что большинство языков UNIX различают строчные и прописные буквы, поэтому в регулярном выражении они также не смешиваются.

Про регулярные выражения написано несколько приличных руководств (re_format(7) или regex(7), regexp(3), grep(1)) и книг (настоятельно рекомендуем [ 26 ] ), так что все сказанное нами далее - попытка прояснить идею и очертить возможности регулярного выражения. В поисках более глубоких знаний рекомендуем обращаться к этим руководствам и в особенности к книге.

< Лекция 13 || Лекция 14: 12345 || Лекция 15 >
Andranik Avakian
Andranik Avakian

41. УК РФ и Комментарии (ст. 273)

М. 2000 г. Издательство: ALT Linux, Институт Логики

Уголовный Кодекс РФ и комментарии к нему?

По ссылке открывается сайт документации Linux, раздел Linux Installation and Getting Started

Сергей Петровский
Сергей Петровский

У Вас написано:

ls -dt1 `grep -il отчет *` | head -1

если знания по шелу мне не изменяют, то должно быть:

ls -dt | `grep -il отчет *` | head -1