Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Шаблоны универсализации в командном процессоре

Пред. 

Глава 3. Введение в командную строку

 След.


Шаблоны универсализации в командном процессоре

Вы, вероятно, уже использовали символы универсализации, не зная, что это такое. Если вы указываете файл в Windows® или выполняете поиск файла, вы используете * для установки соответствия случайной строке. Например, *.txt соответствует всем файлам с именами, заканчивающимися на .txt. Мы также часто использовали это в последнем разделе. Но кроме * существует еще много других универсализаций.

Когда вы вводите команду типа ls *.txt и нажимаете на Enter, задача по нахождению файлов, соответствующих шаблону *.txt, выполняется не командой ls, а самим shell'ом. Требуется некоторое пояснение того, как командная строка интерпретируется shell'ом. Когда вы вводите:

$ ls *.txt
      readme.txt  recipes.txt

командная строка разбивается сначала на слова (ls и *.txt в этом примере). Когда командный процессор видит в слове *, он будет интерпретировать все слово как шаблон универсализации и будет заменять его именами всех соответствующих файлов. Поэтому команда, перед тем как командный процессор ее исполнит, принимает вид ls readme.txt recipe.txt, что и дает ожидаемый результат. Другие символы также заставляют командный процессор реагировать подобным образом:

  • ?: соответствует одному и только одному символу, независимо от того, чем является этот символ;
  • [...]: соответствует любому символу, найденному в скобках. Символы могут быть заданы или в виде диапазона символов (т.е. 1-9), или в виде дискретных значений, или даже в двух видах одновременно. Пример: [a-zBE5-7] будет соответствовать всем символам между a и z, а также символам B, E, 5, 6 или 7;
  • [!...]: соответствует любому символу не найденному в скобках. [!a-z], например, будет соответствовать любому символу, не являющемуся буквой в нижнем регистре[5];
  • {c1,c2}: соответствует c1 или c2, где c1 и c2 также являются шаблонами универсализации. Это означает, что вы, например, можете написать {[0-9]*,[acr]}.

Далее представлено несколько шаблонов и их значения:

  • /etc/*conf: все файлы в каталоге /etc с именами, заканчивающимися на conf. Этому могут соответствовать файлы /etc/inetd.conf, /etc/conf.linuxconf, , а также /etc/conf , если такой файл существует. Помните, что * также может соответствовать пустой строке.
  • image/{cars,space[0-9]}/*.jpg: все файлы с именами, заканчивающимися на .jpg, в каталогах image/cars, image/space0, (...), image/space9, если такие каталоги существуют.
  • /usr/share/doc/*/README: все файлы с именами README во всех подкаталогах, следующих непосредственно после /usr/share/doc. Одним из совпадений, например, будет /usr/share/doc/mandrake/README, но не /usr/share/doc/myprog/doc/README.
  • *[!a-z]: все файлы в текущем каталоге с именами, которые не оканчиваются буквой в нижнем регистре.



[5] Будьте осторожны! Хотя это справедливо для большинства языков, это может быть не так в вашей собственной настройке языка (локали). Это зависит от порядка сортировки. В некоторых языковых настройках [a-z] будет соответствовать a, A, b, B, (...), z. Не говоря уже о том, что в некоторых языках имеются буквы со знаками акцентуации...


Пред. 

Уровень выше

 След.

Обработка атрибутов файлов 

Начало

 Перенаправления и каналы