Библиотека сайта rus-linux.net
Руководство по Bash для начинающих | ||
---|---|---|
Назад | Глава 4: Регулярные выражения | Вперед |
Поиск по шаблону с использованием возможностей Bash
Символьные диапазоны
Помимо команды grep и регулярных выражений, в командной оболочке непосредственно есть ряд способов поиска соответствия шаблону без использования внешних программ.
Как вы уже знаете, звездочка (*) и вопросительный знак (?) соответствует любой строке или любому одиночному символу, соответственно. Если заключить эти специальные символы в кавычки, то при поиске соответствия будет рассматриваться их литеральные значения:
cathy ~> touch "*" cathy ~> ls "*" *
Но вы также можете использовать квадратные скобки, чтобы найти соответствие любому заключенному в них символу, либо диапазону символов, если пара символов разделяется дефисом. Например:
cathy ~> ls -ld [a-cx-z]* drwxr-xr-x 2 cathy cathy 4096 Jul 20 2002 app-defaults/ drwxrwxr-x 4 cathy cathy 4096 May 25 2002 arabic/ drwxrwxr-x 2 cathy cathy 4096 Mar 4 18:30 bin/ drwxr-xr-x 7 cathy cathy 4096 Sep 2 2001 crossover/ drwxrwxr-x 3 cathy cathy 4096 Mar 22 2002 xml/
В этом списке отображаются все файлы, которые начинаются с символов "a", "b", "c", "x", "y" или "z" и расположены в домашнем директории пользователя cathy.
Если первым символом в квадратных скобках будет "!" или "^", то ищется соответствие любому символу, который не указан внутри скобок. Если нужно найти соответствие символу дефис ("-"), укажите его в качестве первого или последнего символа. Правила сортировки зависят от текущей локали и от значения переменной LC_COLLATE
, если она установлена. Вспомните, что в других локалях выражение "[a-cx-z]" может интерпретироваться как "[aBbCcXxYyZz]", если сортировка делается в словарном порядке. Если вы хотите быть уверенными, что используется традиционная интерпретация диапазонов, явно задайте именно такую интерпретацию, присвоив для этого значение "C" переменным LC_COLLATE
или LC_ALL
.
Символьные классы
Внутри квадратных скобок можно указывать символьные классы; используйте формат [:CLASS:], где CLASS определяется стандартом POSIX и имеет одно из следующих значений:
"alnum", “alpha", "ascii", "blank", "cntrl", "digit", "graph", "lower", "print", "punct", "space", "upper", "word" или "xdigit".
Несколько примеров:
cathy ~> ls -ld [[:digit:]]* drwxrwxr-x 2 cathy cathy 4096 Apr 20 13:45 2/ cathy ~> ls -ld [[:upper:]]* drwxrwxr-- 3 cathy cathy 4096 Sep 30 2001 Nautilus/ drwxrwxr-x 4 cathy cathy 4096 Jul 11 2002 OpenOffice.org1.0/ -rw-rw-r-- 1 cathy cathy 997376 Apr 18 15:39 Schedule.sdc
Когда включен параметр командной оболочки extglob
(используя встроенную команду shopt
), можно воспользоваться несколькими операторами, позволяющими выполнять расширенный поиск по шаблонам. Дополнительную информацию смотрите в документации по Bash, в разделе Basic shell features → Shell Expansions → Filename Expansion → Pattern Matching (Базовые возможности командной оболочки → Дополнительные замены → Постановка имен файлов → Соответствие шаблону).
Предыдущий раздел: | Оглавление | Следующий раздел: |
Примеры использования grep | Подводим итог |