На bash:
$ LC_ALL=C
$ ls
bar BAT cab foo ieee2000 MAC moc test zac zara ZOO
$ ls *[a-z]
bar cab foo moc test zac zara
$ ls *[bd-z]
bar cab foo test
$ ls *[^cC]
bar BAT cab foo ieee2000 test zara ZOO
$ ls *[^bc]
bar BAT foo ieee2000 MAC test zara ZOO
Поскольку это расширения оболочки , вы также можете использовать их в циклах и т. Д. Относительно легко.
Обратите внимание на настройку LC_ALL=C
-если вы используете неанглийский язык, это может потребоваться для получения правильных результатов:
$ echo $LC_COLLATE
en_US.UTF-8
$ ls *[a-z]
bar BAT cab foo MAC moc test zac zara ZOO
$ LC_COLLATE=C
$ ls *[a-z]
bar cab foo moc test zac zara
Как видно из примера выше, вы можете установить более конкретную переменную LC_COLLATE
вместо LC_ALL
.
РЕДАКТИРОВАТЬ:
Кстати, по крайней мере, в моей системе (Mandriva Linux 2010.1) локаль также влияет на grep
:
$ LC_COLLATE=en_US.UTF-8
$ echo A | grep '[a-z]'
A
$ LC_COLLATE=C
$ echo A | grep '[a-z]'
$