Традиционные диапазоны символов

Если необходимо сконструировать регулярное выражение, которое находило бы в наших списках все файлы с именами, начинающимися с заглавной буквы, это можно выполнить следующим образом:

[me@linuxbox ~]$ grep -h '^[ABCDEFGHIJKLMNOPQRSTUVWXZY]' dirlist*.txt

Достаточно просто поместить 26 букв в верхнем регистре в выражение в квадратных скобках. Но необходимость ввода всех этих символов вызывает некоторое беспокойство, поэтому предусмотрен другой способ:

[me@linuxbox ~]$ grep -h '^[A-Z]' dirlist*.txt

MAKEDEV

ControlPanel

GET

HEAD

POST

X

X11

Xorg

MAKEFLOPPIES

NetworkManager

NetworkManagerDispatcher

Мы сократили множество с 26 буквами до 3-символьного диапазона. Так можно выразить любой диапазон символов и даже несколько диапазонов, например, для поиска имен файлов, начинающихся с буквы или цифры:

[me@linuxbox ~]$ grep -h '^[A-Za-z0-9]' dirlist*.txt

Как следует из примеров, символ дефиса получает в диапазонах специальное значение, поэтому возникает вопрос: как включить дефис в выражение в квадратных скобках, чтобы он интерпретировался как обычный символ? Для этого достаточно поставить его в начало выражения. Например:

[me@linuxbox ~]$ grep -h '[A-Z]' dirlist*.txt

Эта команда найдет все имена файлов, содержащие буквы верхнего регистра. С другой стороны, следующее выражение:

[me@linuxbox ~]$ grep -h '[-AZ]' dirlist*.txt

найдет все имена файлов, содержащие дефис, букву A или букву Z.