- •Служебные символы используемые в shell скриптах
- •Подстановочные символы (файловые шаблоны) и регулярные выражения.
- •Файловые шаблоны в dos
- •Файловые шаблоны в ndos
- •Файловые шаблоны командного интерпретатора Shell
- •Регулярные выражения
- •Регулярные выражения интерпретатора awk
- •Регулярные выражения Perl (целиком совместимы с выражениями в .Htaccess)
- •Регулярные выражения php
- •Синтаксис регулярных выражений (posix)
- •Синтаксис регулярных выражений в стиле Perl
- •Регулярные выражения в JavaScript
Файловые шаблоны в ndos
Понимая, что этих шаблонов слишком мало, автор всемирно известных Norton Utilities, Питер Нортон, чьим любимым занятием было усовершенствование DOS (постепенно эти вещи появлялись и у Микрософт: однажды они сделали Скандиск, однажды купили у Нортона усеченный дефрагментатор…), еще в 80-х годах ввел расширенную поддержку шаблонов в свой командный интерпретатор NDOS (Norton Disk Operation Sistem), который предложил в замен Command.com-а. Язык NDOS своими возможностями не уступал бейсику и входил в состав Нортоновских утилит до тех пор, пока не наступило господство Windows. С наступлением эпохи Windows, NDOS утратил значение, так как практически для всех задач, для которых раньше требовалась командная строка, были сделаны графические аналоги и уже никто не хотел помнить, как правильно писать, например, VSCRPUT. Кроме того, NDOS не поддерживал длинных имен, а Питер Нортон, к тому времени, ушел на покой, продав права на разработки и торговые марки корпорации Symantec, так что, продлевать жизнь NDOS-а было некому, а, возможно, и незачем. Но ветераны компьютерного фронта, возможно еще помнят, каким мощным был язык и какими были его файловые шаблоны.
В NDOS, к стандартным звездочке и вопросительному знаку добавились наборы символов и их диапазоны, а так же, логические операторы.
Подобный шаблон заключался в квадратные скобки в которых прописывались требуемые символы, либо диапазон (символ1 – символ2). Для обозначения того что, символы, наоборот, не требуются, ставился восклицательный знак. Как в таком случае работала всем известная команда DIR?
dir [acm]* выводит список файлов и каталогов, начинающихся либо на a, либо на c, либо на m.
dir [a-c]* выводит список файлов и каталогов, начинающихся либо на a, либо на b, либо на c.
dir [!c]* выводит список файлов и каталогов, НЕ начинающихся на c.
Заинтересовавшиеся NDOS могут скачать и сам NDOS, и русскоязычную документацию к нему в архивах со страницы NDOS (поскольку он утратил актуальность, я не распаковываю документацию на сайт).
Однако, не будем далеко отходить от темы.
NDOS раздвинул границу шаблонов, возможно, заимствовав эту идею из Unix (в каком году она там появилась?). По крайней мере, в Unix, для командного интерпретатора Shell, используется тот же синтаксис.
Файловые шаблоны командного интерпретатора Shell
Поиск всех символов (метасимвол *)
Метасимвол * осуществляет поиск любой строки символов, включая нулевую (пустую) строку. Вы можете использовать * для обозначения полного или частичного имени файла. Просто символ * ищет все имена файлов и справочников в текущем справочнике, за исключением тех, которые начинаются с точки.
Символ * может представлять символы в любой части имени файла. Например, если вы знаете, что несколько файлов имеют одинаковые первые и последние буквы, то вы можете выдать запрос, основываясь на этом факте. Если в вашем справочнике находятся файлы FATE, FE, FADED_LINE, FIG3.4E, FINE_LINE, FAST_LINE, то для отображения всех этих файлов используйте шаблон:
F*E
Поиск по одному символу (метасимвол ?)
Метасимвол ? осуществляет поиск любого одного символа в имени файла за исключением лидирующей точки. Предположим, вы имеете книгу, в которой 12 глав и хотите получить список глав до 9-ой главы. Если ваш справочник содержит следующие файлы:
Chapter1
Chapter2
Chapter5
Chapter9
Chapter11
то используйте шаблон с метасимволом ? для получения всех глав, которые начинаются со строки "Chapter" и заканчиваются одним символом:
Chapter1
Chapter2
Chapter5
Chapter9
Хотя метасимвол осуществляет поиск одного символа, вы можете использовать его для поиска более одного символа в имени файла. Например, вы получите перечень всех остальных глав в текущем справочнике, если используете следующий шаблон:
Chapter??
И, конечно, чтобы получить список всех глав в текущем справочнике, используйте метасимвол *:
Chapter*
Поиск одного набора (метасимвол [])
Если вы хотите, чтобы shell нашел любой символ из перечисленных вами символов, то заключите эти символы в квадратные скобки. Предположим, ваш справочник содержит следующие файлы: cat, fat, mat, rat. Если вы воспользуетесь в качестве части имени файла шаблоном [crf], то shell будет искать имена файлов, в которые входят либо буква "c", либо буква "r", либо буква "f" в указанной позиции. Поис по шаблону [crf]at даст следующий результат:
cat
fat
rat
Символы, которые могут быть сгруппированы в скобки, называются классом символов.
Скобки могут также использоваться для обозначения диапазона символов, цифр или букв. Предположим в вашем справочнике содержатся следующие файлы: chapter1, chapter2, chapter3, chapter4, chapter5, chapter6. Если вы укажете:
chapter[1-5]
то shell найдет файлы c chapter1 по chapter5.
Класс символов можно также указать с помощью диапазона букв. Если вы укажете [A-Z], то shell будет искать только большие буквы, если [a-z] - то малые буквы.
Используется ли в Shell символ отрицания, как в NDOS – не знаю, не пробовал, а в документации не вижу. Приду на работу, попробую (если не забуду). Напишу, что получится.