Skip to content

Сопоставление с шаблоном или wildcarding в bash

Bash поддерживает сопоставление с шаблоном, которое иногда называют подстановкой знаков (wildcarding).
[[Советы, примечания, сценарии использования для bash#Шаблоны - это не RegEx]]

Примеры

Text Only
[0-9] - любая ЦИФРА
[0-9]* - любые ЦИФРЫ
[!0-9] или[^0-9] - ВСЕ, кроме цифр
[aeiou] - любая ГЛАСНАЯ буква
[^aeiou] или [^aeiou] - всё, кроме гласных

Классы символов

Класс символов Описание
[[:alnum:]] Алфавитно-цифровой
[[:alpha:]] Буквенный
[[:ascii:]] ASCII
[[:blank:]] Пробел или табуляция
[[:ctrl:]] Управляющий символ
[[:digit:]] Число
[[:graph:]] Все что угодно кроме управляющих символов и пробела
[[:lower:]] Символы в нижнем регистре
[[:upper:]] Символы в верхнем регистре
[[:print:]] Все, кроме управляющих символов
[[:punct:]] Символы пунктуации
[[:space:]] Пробелы, включая разрывы строк
[[:word:]] Буквы, цифры и символ подчеркивания
[[:xdigit:]] Шестнадцатеричный символ
#### Примеры

Классы символов указываются как [:ctrl:], но в дополнительных скобках, поэтому в итоге получается [[:ctrl:]].

Например:

Bash
*[[:punct:]]jpg - любое имя файла ('wow!jpg', 'some,jpg', 'photo.jpg')

Пример с grep:

Bash
grep 'X[[:upper:][:digit:]]' idlist.txt

Выведется любая строка, содержащая символ X, за которым идет любая прописная буква или цифра:

Text Only
User: XTjohnson
an XWing model 7
an X7wing model

Более сложные виды сопоставления можно "включить", если добавитьь параметр extglob оболочки, чтобы можно было повторять или отменять шаблоны:

Bash
shopt -s extglob

Weird shi

Если при указании, например, на:

Bash
echo data > /tmp/*.out

в tmp/ не будет файла, заканчивающегося на .out, то оболочка создаст там файл с именем *.out - удалять его можно так:
Bash
rm /tmp/\*.out

Внутри кавычек wildcaring НЕ работает

Внутри кавычек (двойных/одинарных) не работает сопоставление с шаблоном.
Поэтому команда:

Bash
echo data > "/tmp/*.out"

создаст файл с именем /tmp/*.out.
Поэтому НЕ юзай кавычки при сопоставлении с шаблоном.


Соус: Книга "Bash и кибербезопасность" --> Глава 2. "Основы работы с bash" --> "Шаблон соответствия в bash"

bash