Сопоставление с шаблоном или wildcarding в bash
Bash поддерживает сопоставление с шаблоном, которое иногда называют подстановкой знаков (wildcarding).
[[Советы, примечания, сценарии использования для bash#Шаблоны - это не RegEx]]
Примеры
[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 extglob
Weird shi
Если при указании, например, на:
echo data > /tmp/*.out
в tmp/ не будет файла, заканчивающегося на
.out
, то оболочка создаст там файл с именем *.out
- удалять его можно так:rm /tmp/\*.out
Внутри кавычек wildcaring НЕ работает
Внутри кавычек (двойных/одинарных) не работает сопоставление с шаблоном.
Поэтому команда:
echo data > "/tmp/*.out"
создаст файл с именем
/tmp/*.out
.Поэтому НЕ юзай кавычки при сопоставлении с шаблоном.
Соус: Книга "Bash и кибербезопасность" --> Глава 2. "Основы работы с bash" --> "Шаблон соответствия в bash"