В процессе работы в командной строке Linux, бывает необходимо применить какое-либо действие на большое количество файлов. Например, надо найти слово ‘test‘ в сотне файлов с именами от file1 до file100:
$ grep test file1 file2 file3 file4 file5...
Перечислять множество имен файлов, так себе занятие. Поэтому в оболочке существует возможность использовать специальные символы для сокращений. Именно с ними и познакомимся.
Символ ‘*’.
В Linux символ ‘*‘ соответствует любой последовательности из любого числа символов в путях к файлам и каталогам.
Примечание.
Исключением в отображении в именах файлов и каталогов является начальная точка. Именно по этой причине команда ‘ls *‘ не отобразит список скрытых файлов и каталогов.
$ grep test file*
Такая команда поможет вам найти слово ‘test‘ во всех файлах начинающихся на ‘file‘.
Символ ‘?’.
Еще один специальный символ — знак ‘?‘. Этот символ позволяет подставить любой символ, но в одном экземпляре, за исключением, конечно, начальной точки. Например, вы можете найти слово ‘test‘ в файлах с номером от 1 до 9. Для этого используем вместо цифр знак вопроса
$ grep test file?
Но такой шаблон не позволит вам осуществить поиск в файлах с номерами от 10 до 99. Для этого придется использовать уже два знака.
$ grep test file??
Символ ‘[]’.
Менее известный, но не менее полезный способ использования шаблонов это квадратные скобки ‘[]‘. Они позволяют указать набор определенных символов. Например, вы можете осуществить поиск в первых пяти файлах:
$ grep test file[12345]
Или задать диапазон с помощью тире
$ grep test file[1-5]
А еще можно искать в файлах с четными номерами, комбинируя звездочку и квадратные скобки:
$ grep test file*[02468]
Использовать квадратные скобки для сопоставления символов можно и не только для цифр, а также и для любых символов. Например, чтобы указать все слова начинающиеся с маленькой буквы и имеющие в середине символ ‘@‘, можно использовать следующий шаблон:
[a-z]*@*
Особенности использования шаблонов.
Шаблоны применимы практически всегда при использовании указаний пути к файлам и папкам. Но надо быть осторожным, особенно с командами, которые принимают только один аргумент — имя файла или каталога. Например, использование шаблона с командой ‘cd‘, модно получить результат не совсем тот, который ожидаешь.
$ ls
dir1 dir2 dir3
$ cd d*
dir1 $
Вы можете попасть в первый каталог, который будет соответствовать шаблону, либо получите сообщение об ошибке, что команда имеет слишком много аргументов.
При работе с шаблонами в оболочке (например, в bash), нужно учитывать два момента.
Первое, это то, что сопоставление с образцом осуществляет сама оболочка, а не вызываемая программа. Поэтому многие, иногда, не понимают почему в одном случае шаблон работает, а в другом нет.
Второе, сопоставление с образцом работает только с именами файлов и каталогов. Оно не пременимо к именам пользователей, хостов и других типов аргументов. Вы так же не можете внести, например, gr?p и ожидать, что выполнится команда grep.
Was this helpful?
0 / 0