Bash поддерживает сопоставление с шаблоном, которое иногда называют подстановкой знаков (wildcarding).
Шаблоны - это не RegEx
Примеры
Wildcard Значение [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:]].
Например:
*[[:punct:]]jpg - любое имя файла ('wow!jpg', 'some,jpg', 'photo.jpg')Пример с grep:
grep 'X[[:upper:][:digit:]]' idlist.txtВыведется любая строка, содержащая символ X, за которым идет любая прописная буква или цифра:
User: XTjohnson
an XWing model 7
an X7wing model
Более сложные виды сопоставления можно “включить”, если добавитьь параметр extglob оболочки, чтобы можно было повторять или отменять шаблоны:
shopt -s extglobWeird shi
Если при указании, например, на:
echo data > /tmp/*.outв tmp/ не будет файла, заканчивающегося на
.out, то оболочка создаст там файл с именем*.out- удалять его можно так:rm /tmp/\*.out
Внутри кавычек wildcaring НЕ работает
Внутри кавычек (двойных/одинарных) не работает сопоставление с шаблоном.
Поэтому команда:echo data > "/tmp/*.out"создаст файл с именем
/tmp/*.out.
Поэтому НЕ юзай кавычки при сопоставлении с шаблоном.
Соус: Книга Bash и кибербезопасность → Глава 2. Основы работы с bash → Шаблон соответствия в bash