Bash Pattern Matching - PullRequest
       4

Bash Pattern Matching

5 голосов
/ 18 октября 2011

Я пытаюсь использовать сопоставление с образцом, чтобы найти все файлы в каталоге, которые имеют расширение .jpg или jpeg.

ls *.[jJ][pP][eE][gG] <- это, очевидно, найдет только расширение .jpeg,Вопрос в том, как сделать <code>[eE необязательным?

Ответы [ 2 ]

7 голосов
/ 18 октября 2011

Матч сложнее.

ls *.[jJ][pP]{[eE],}[gG]
2 голосов
/ 19 октября 2011

Как и стандартные (простые) шаблоны глобусов, bash ≥4.0 имеет расширенное глобирование.
Это по умолчанию .Чтобы включить его, используйте: shopt -s extglob

С extglob у вас есть доступ к расширенным шаблонам регулярных выражений, а также к стандартным шаблонам.Кроме того, в вашей конкретной ситуации вы можете еще больше адаптировать поведение своего глобуса, включив регистр без учета регистра , который также отключен по умолчанию.Чтобы включить его, используйте: shopt -s nocaseglob

Включение extglob не меняет работу стандартных шариков.Вы можете смешать две формы.Единственная проблема заключается в том, что вы должны знать о специальном расширенном синтаксисе регулярных выражений.Например, в приведенном ниже примере единственная его часть, которая является расширенным регулярным выражением, это ?(e).Остальное - стандартное глобальное расширение с включенной нечувствительностью к регистру.

Расширенное регулярное выражение, нечувствительное к регистру глобус для вашей ситуации:

shopt -s extglob nocaseglob
ls -l *.jp?(e)g

Дополнительную информацию и примеры можно найти на: Bash Extended Globbing .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...