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

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

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, ...

  • Как я могу проанализировать ini-файл, чьи значения могут содержать определенные символы?
  • Проверьте некоторое свойство для каждой строки файла
  • Почему это регулярное выражение не работает?
  • Стратегия для извлечения имени фильма из этого неравномерного набора данных?
  • Задача для sed конвертировать код из Mathematica в Matlab
  • Backreference в регулярном выражении Awk
  • находить и удалять файлы старше конкретных дней и иметь определенную строку в именах файлов
  • Шаблон Regex для замены нескольких значений с помощью sed
  • 2 Solutions collect form web for “Регулярные выражения в оболочке”

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

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

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

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

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

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

     echo a*(b)c 

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

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