BashСовпадение шаблонов и регулярные выражения


Синтаксис

  • $ shopt -u option # Деактивировать встроенную опцию Bash '
  • $ shopt -s option # Активировать встроенную опцию Bash '

замечания

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

Допустимые классы символов для [] glob определяются стандартом POSIX:

alnum alpha ascii blank cntrl digit graph lower print punct space верхнее слово xdigit

Внутри [] может использоваться более одного класса или диапазона символов, например,

$ echo a[a-z[:blank:]0-9]*

будет соответствовать любому файлу, начинающемуся с a и за ним следует либо строчная буква, либо пробел или цифра.

Следует иметь в виду, однако, что [] glob может быть полностью отвергнут, а не только его части. Отрицающая символ должен быть первым символом после открытия [ , например, это выражение соответствует всем файлам , которые не начинаются с a

$ echo [^a]*

Следующее соответствует всем файлам, начинающимся с цифры или ^

$ echo [[:alpha:]^a]*

Он не соответствует файлу или папке, которая начинается с буквы, кроме a потому что ^ интерпретируется как литерал ^ .

Экранирование символов глобуса

Возможно, что файл или папка содержит символ глобуса как часть его имени. В этом случае glob может быть экранирован с предыдущим \ для того, чтобы выполнить литеральное совпадение. Другой подход заключается в использовании двойных "" или одиночных '' котировок для обращения к файлу. Bash не обрабатывает глобусы, которые заключены в "" или '' .

Отличие от регулярных выражений

Наиболее существенное различие между глобусами и регулярными выражениями состоит в том, что для правильных регулярных выражений требуется определитель, а также квантификатор. Квалификатор определяет, что нужно совместить, и квантификатор сообщает, как часто соответствовать определителю. Эквивалентный RegEx для * glob есть .* Где . обозначает любой символ и * обозначает ноль или более совпадений предыдущего символа. Эквивалентный RegEx для ? glob .{1} . Как и раньше, определитель . соответствует любому символу, а {1} указывает, что он соответствует предыдущему квалификатору ровно один раз. Это не следует путать с ? квантификатор, который соответствует нулю или один раз в RegEx. Шаблон [] glob можно использовать точно так же в RegEx, если за ним следует обязательный квантификатор.

Эквивалентные регулярные выражения

Glob RegEx
* .*
? .
[] []

Совпадение шаблонов и регулярные выражения Связанные примеры