Инструменты пользователя

Инструменты сайта


linux:console:wildcards

Это старая версия документа!


# Подстановочные знаки (Standard Wildcards или Globbing Patterns)

Подстановочные знаки — это символы, имеющие особое значение. Они могут представлять буквы или цифры, наборы символов или даже множество символов.

Когда мы помещаем подстановочные знаки вместо имени файла, то командная оболочка (bash и др.) расширит эти подстановочные знаки до любого соответствующего имени файла, это называется расширением имени файла или подстановкой (Globbing).

Командная оболочка (bash и др.) раскрывает шаблон имён файлов до запуска команды, которая затем обрабатывает полученный список файлов.

## Wildcards

Bash имеет лишь несколько подстановочных знаков, которые он распознает, но они очень мощные.

  • ? - представляет один символ.
  • ** * ** — представляет ноль или более символов.
  • [ ] — представляет диапазон или набор символов.
  • { } – представляет собой список терминов, разделенных запятыми.
  • [! ] — представляет любой символ, не входящий в диапазон или набор.
  • ** \ ** — используется для экранирования любого из вышеуказанных символов, чтобы вы могли искать их в имени файла

Пример использования: ``` $ ls file1.jpg file2.jpg figure.png report.txt facts.txt

$ ls f* file1.jpg file2.jpg figure.png facts.txt

$ ls *.txt report.txt facts.txt ``` здесь, когда выполняется такая команда, как `ls *.txt` то bash расширяет это и заменяет ** *.txt ** любым файлом или каталогом, соответствующим шаблону (в данном случае это: ноль или более символов, за которыми следует «.txt»).

Если мы не укажем явный путь или разделитель путей (т.е. «/») в наши шаблоны, то bash не будет расширяться до имен файлов за пределами текущего каталога.

.

## Примеры использования

### Соответствие многим, одному и нулю символов ( ? и *)

Чтобы сопоставить ноль или несколько символов или ровно один из любого символа, мы используем подстановочные знаки ** * ** и ?

``` $ ls abc abc1 abc2 abc3 xyz xyz1 xyz2 xyz3

$ ls abc* abc abc1 abc2 abc3

$ ls abc? abc1 abc2 abc3 ```

Обратите внимание, что ***** соответствует как abc , так и abc1, abc2, abc3 , тогда как ? не соответствует abc. Это связано с тем, что ** * ** означает ноль или более любых символов, а ? предназначен ровно для одного любого символа.
Если бы мы хотели сопоставить один или несколько символов, то ** * ** не сработает. Однако если мы объединим эти два понятия, как ** ?* **, то это будет соответствовать одному или нескольким символам. ### Наборы и диапазоны, []

Квадратные скобки ([]) позволяют нам реализовать два типа совпадений. Мы можем сопоставить список символов или диапазон, разделенный дефисом «-».

Если бы мы хотели перечислить все файлы длиной в три буквы, то могли бы это сделать так: ``` $ ls [a-z][a-z][a-z] abc xyz

$ ls [abcxyz][abcxyz][abcxyz] abc xyz

$ ls [a-y][a-y][a-y] abc

$ ls [A-Z][A-Z][A-Z]

```

В строке 1 мы указали bash три диапазона для сопоставления. Каждый диапазон будет соответствовать только одному символу, поэтому для соответствия трем символам потребовалось три диапазона.

Также обратите внимание, что последняя команда ни с чем не совпала, поскольку Linux чувствителен к регистру.

Строки 1 и 3 дают одинаковый результат, но если в строке 1 используется диапазон, то в строке 3 используются наборы.
Мы могли бы объединить диапазоны в наборе.

Чтобы сопоставить все буквы и цифры, как в верхнем, так и в нижнем регистре, мы должны использовать [a-zA-Z0-9].
Разместив ! в начале набора или диапазона мы указываем bash, чтобы он соответствовал всему, кроме символов, перечисленных в наборе.

Все специальные персонажи теряют смысл внутри квадратных скобок ([]), за исключением «-» который приобретает особый смысл, т. е. [? \*] будет соответствовать только знаку вопроса или восклицательному знаку, но они не будут использоваться как подстановочные символы.

. ### Списки, {}

Фигурные скобки {} используются для хранения списка терминов, разделенных запятыми, которые могут быть сопоставлены.

``` $ ls {abc,xyz}1 abc1 xyz1

$ ls abc{1,3} abc1 abc3 ``` .

## Документация

Ссылка на Linux Documentation Project - Wildcards

/var/www/html/dokuwiki/data/attic/linux/console/wildcards.1783275559.txt.gz · Последнее изменение: — so_v_a