Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Руководство по 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   Подводим итог