#bash #shell #command-line-interface #ls
Вопрос:
Я застрял с этой проблемой:
Перечислите все файлы с ls, которые имеют по крайней мере две гласные в любой позиции и заканчиваются на .c, .h или .s
Я пришел с частичным решением : ls *{a,e,i,o,u}*.[chs]
Но, очевидно, это не соответствует требованиям проблемы, потому что в нем перечислены все файлы, в которых есть любое количество гласных, а не два или более.
Комментарии:
1. Я не думаю, что глобусы поддерживают это, я бы передал ls через egrep для фильтрации также с помощью регулярного выражения
2. Глобусы поддерживают (эквивалент) этого. Просто включите
extglob
, что в основном включено по умолчанию для интерактивных оболочек.
Ответ №1:
Я бы тоже использовал класс символов для гласных
ls *[aeiou]*[aeiou]*.[chs]
Использование расширения скобок также возможно, но некоторые файлы затем отображаются несколько раз:
ls *{a,e,i,o,u}*{a,e,i,o,u}*.[chs]
Комментарии:
1. Я предлагаю добавить
shopt -s nullglob
для вашей второй команды.2. Имейте в виду, что фигурные скобки создают несколько шаблонов, которые затем необходимо расширить, а не являются частью одного шаблона.
*{a,e,i,o,u}*
, например, сокращенно*a* *e* *i* *o* *u*
от .