Регулярные выражения в оболочке

У меня есть два вопроса об использовании регулярных выражений внутри оболочки.

1. Использование *

Согласно странице wikipedia о регулярных выражениях :

*: Звездочка указывает, что существует ноль или более предыдущего элемента. Например, ab * c соответствует «ac», «abc», «abbc», «abbbc» и т. Д.

Однако, когда я пишу rm test*.iso , он удалит все файлы, начинающиеся с «test» и заканчивая «.iso» независимо от того, что есть (или нет) между «test» и «.iso». Таким образом, файл tes.iso не будет удален.

Если вы возьмете пример abc, согласно wikipedia, «ab * c» соответствует «ac». Поэтому rm ab*c должен удалить файл «ac». Почему rm не использует регулярное выражение, как описывает их wikipedia?

2. Использование – и?

Все же согласно странице wikipedia на регулярных выражениях :

?: Вопросительный знак указывает, что есть нуль или один из предыдущего элемента. Например, colou? R соответствует как «цвет», так и «цвет».

+: Знак «плюс» указывает, что есть один или несколько предыдущих элементов. Например, ab + c соответствует «abc», «abbc», «abbbc» и т. Д., Но не «ac».

"?" похоже, работает как «*», то есть «?» символ заменяет один или нулевой элемент (но не предыдущий, наоборот, как говорит википедия).

Я не знаю, как использовать «+», и это мой второй вопрос. Меня также интересуют любые трюки, касающиеся регулярных выражений, и rm, cp, ...

  • искать и заменять номера в vim
  • В VIM замените путь косой чертой, не используя escape-слэши
  • многострочный awk регулярное выражение
  • AWK с спецификацией: Есть ли классный способ обработки спецификации Unicode с регулярным выражением?
  • Получить все имена файлов с определенным количеством символов
  • Как избежать синдрома наклонившейся зубочистки в awk?
  • Используйте регулярное выражение, чтобы проверить, имеет ли конкретный каталог папки, начиная с определенного слова
  • Ack regex на имена файлов
  • 2 Solutions collect form web for “Регулярные выражения в оболочке”

    Обозначение соответствия шаблона оболочки описано в этом стандартном документе .

    Как отмечается в документе во введении, нотация соответствия шаблонов связана, но немного отличается от обозначений регулярных выражений.

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

    Оболочка использует регулярные выражения только при определенных условиях (которые, вероятно, отличаются от оболочки к оболочке).

    В bash вы должны активировать их с помощью: shopt -s extglob

    После этого вы можете использовать что-то вроде:

     echo a*(b)c 

    См. Блок Pattern Matching в man bash .

    Interesting Posts

    Ubuntu блокирует доступ к ip, за исключением одного порта

    жесткий диск не распознается / файловая система слишком велика, чтобы безопасно монтироваться в этой системе / hdparm показывает мусор

    Проблема с скриптом с пробелами в имени файла

    Восстановить данные RAID5

    Как получить полное завершение в диалоговом окне запуска приложения?

    idevicerestore не компилируется на Ubuntu 15.04

    Фильтровать файлы, сгенерированные `find`, с помощью обработанного вывода команды` file`

    Текстовый редактор с выбором размера шрифта для определенных человеческих языков (например, Unicode Block), например, Devanagari

    bath control, если используется флаг опции

    Ядро не распознает новые устройства из модуля DKMS?

    Удаление файлов / папок с файлами .nfs

    Я хочу поймать STDERR и STDOUT сценария с фоновым запуском

    Лучшая последняя версия или пакет для rkhunter и chkrootkit?

    Сортировка процессов путем использования памяти

    Запуск службы на HPUX при загрузке

    Linux и Unix - лучшая ОС в мире.