UNIX — универсальная среда программирования | страница 29
То же самое
>$ rm temp[a-z] Удалить все tempa, …, tempz
Шаблон >? задает любой одиночный символ:
>$ ls ? Список файлов с именем из одного символа
>$ ls -l ch?.1 Список ch1.1 ch2.1 ch3.1 и т.д., но не ch10.1
>$ rm temp? Удалить все файлы temp1, …, tempa и т.д.
Отметим, что шаблоны сопоставляются только с именами существующих файлов. В частности, нельзя создать новые имена файлов с помощью шаблонов. Например, если вы захотите расширить >ch до >chapter в каждом имени файла, то такой вариант вам не поможет:
>$ mv ch.* chapter.* Не работает!
поскольку >chapter.* не соответствует ни одному из существующих имен файлов.
Символы шаблонов, подобные >*, могут использоваться в абсолютных именах наравне с обычными именами файлов; сопоставление происходит для каждого компонента абсолютного имени, содержащего специальный символ. Так, >/usr/mary/* инициирует поиск файлов в >/usr/mary/, a >/usr/*/calendar порождает список абсолютных имен всех пользователей, работающих с каталогом >calendar.
Если вам когда-нибудь придется отказаться от специального назначения символов >*, >? и др., заключите весь аргумент в апострофы, например:
>$ ls '?'
Можно также предварить специальный символ обратной дробной чертой:
>$ ls \?
(Вспомните, что, поскольку >? не является символом стирания или уничтожения, обратная дробная черта перед ним будет обрабатываться не ядром, а интерпретатором >shell.) Использование кавычек подробно рассматривается в гл. 3.
В чем состоит различие между следующими командами:
>$ ls junk $ echo junk
>$ ls / $ echo /
>$ ls $ echo
>$ ls * $ echo *
>$ ls '*' $ echo '*'
Большинство команд, которые мы рассматривали, производят вывод на терминал, некоторые из них, подобно редактору, осуществляют ввод с терминала. А теперь приведем почти универсальное правило: терминал может быть заменен для ввода, вывода или обеих операций на файл.
Например,
>$ ls
выдает список файлов на ваш терминал. Но если задать
>$ ls > filelist
то тот же список файлов помещается вместо этого в файл >filelist. Символ >> означает, что выходной поток должен быть помещен в указанный далее файл, а не выведен на терминал. Файл будет создан, если он ранее не существовал, или будет заменено содержимое старого. На своем терминале вы ничего не получите. В качестве другого примера можно слить несколько файлов, "перехватив" выходной поток команды >cat и направив его в файл:
>$ cat f1 f2 f3 > temp
Символ >>>