Упс... :) Невнимательность...
читать дальше »
Символы подстановки
В командных строках и сценариях Linux, как и в UNIX (и даже в DOS), допускается использование символов подстановки (wildcards). Символ подстановки заменяет другой символ или последовательность символов. Символы подстановки помогут найти нужный файл, если вы забыли его точное имя (помню только, что кончается на 1999), или вывести список всех файлов, удовлетворяющих определенному критерию, ≈ например, всех файлов, имена которых заканчиваются на .с; такая задача может возникнуть при работе над программами в Linux.
В Linux используются символы подстановки трех типов: *, ? и [ ]. Все они рассматриваются ниже.
С технической точки зрения символы подстановки относятся к оболочке, поэтому о них следовало бы говорить при обсуждении оболочек. Однако мы рассмотрим их сейчас, потому что сказанное относится к любым оболочкам.
Рассматривая команду ls в предыдущем разделе, мы ограничились ее применением для отдельных файлов. Однако в некоторых ситуациях требуется вывести список всех файлов, обладающих некоторым общим признаком, ≈ например, с именами, заканчивающимися на .с. В следующей командной строке команда ls выводит все файлы, удовлетворяющие этому критерию:
gilbert:~$ Is *.c
aardvark.c stuff.с titles.с xylophone.с
На место символа * ls подставляет любую последовательность символов, после которой следует .с. Как видно из приведенного списка, команда выполнена успешно. Символ * может соответствовать любому количеству символов, в том числе и нулю (пустой строке):
gilbert:~$ Is titles.*
titles. titles.с
В случае titles. символ подстановки соответствует нулю символов.
Звездочка (*) может находиться в начале или в конце образца. В выражении допускается использование нескольких символов *:
gilbert: ~$ Is t*. *
titles.с
Следующая командная строка выводит список всех файлов, у которых в произвольной позиции имени встречается строка titles:
gilbert:~$ Is *titles*
subtitles titles titles.с
Звездочка ≈ самый универсальный из всех символов подстановки. На другом фланге стоит вопросительный знак (?), который соответствует ровно одному символу:
gilbert:~$ Is title?
titles
В данном примере файл titles, с не включается в список, потому что после строки title в имени следуют два символа. В имени titles после искомой строки стоит всего один символ, что соответствует нашему критерию.
Наконец, последний универсальный символ ограничивается символами, перечисленными в квадратных скобках ([]). Допустим, вы просматриваете каталог со служебными записками за последние 12 месяцев. Будучи грамотным пользователем Linux, вы завершаете имя каждого файла номером месяца, в котором он был записан (конечно, при установке Linux файлов еще нет ≈ считайте это советом на будущее). Вы хотите найти записку, написанную когда-то в течение лета, но не помните точного имени файла, а просмотр списка ничего не дает. В этом случае поиск должен ограничиваться файлами, имена которых кончаются символами 6, 7 или 8 (июнь, июль и август). Для этого в квадратных скобках указывается интервал 6-8:
gilbert:~/memos$ Is *[6-8]
golf.8 golfanne.8 golfpat.6 golfjim.6
golftod.6 golftom.7
Тем самым вы сужаете список файлов, возвращаемых командой ls. Заодно становится ясно, что вы слишком много играете в гольф.
В предыдущем примере выводился список файлов, имена которых заканчивались цифрой из указанного интервала ≈ например, 6, 7 или 8. Интервал может состоять лишь из одного символа:
gilbert:~/memos$ Is *[6]
golfpat.6 golfjim.6 golftod.6
Если вы ищете конкретный символ (не забывая о том, что в Linux различаются символы верхнего и нижнего регистра) или символ из конкретного диапазона, укажите их в скобках:
gilbert :~/memos$ Is report.[Ee]rc
report.Erc report.erc
Символы подстановки могут использоваться в большинстве команд Linux.