Найти и регулярное выражение

Что я делаю неправильно с этим выражением находки?

; touch ook ooks ; find . -name 'ook' -or -name 'ooks' -type f ./ook ./ooks ; find . -name 'ook[s]?' -type f [returns nothing] ; echo $? 0 

  • Проблемы с регулярным выражением для работы с поиском
  • Заменить символ, кроме последних x входов
  • bash - нечувствительность к регистру переменной
  • замените несколько запятых на одну или несколько наборов фигурных скобок и исключение, что в одном или нескольких наборах фигурных скобок
  • Регулярные выражения помогают
  • Регулярное выражение, соответствующее X-идентификаторам сеанса?
  • Альтернативное регулярное выражение для {}
  • Как совместить классы символов POSIX регулярного выражения?
  • 2 Solutions collect form web for “Найти и регулярное выражение”

    Вы смешиваете регулярные выражения с шаблонами поиска оболочки.

    ? в оболочке означает любой отдельный символ.

    ? в regexp означает, что предыдущий символ (или подзапись) является необязательным.

    Пытаться:

    find . -regex '.*ooks?' -type f

    На странице поиска:

            -regex pattern
                   Имя файла соответствует шаблону регулярного выражения.  Это совпадение
                   на весь путь, а не на поиск.  Например, чтобы сопоставить файл
                   с именем `./fubar3 ', вы можете использовать регулярное выражение`. * bar.'  или
                   `. * b. * 3 ', но не` f. * r3'.  Регулярные выражения понятны
                   по поискам по умолчанию Emacs Regular Expressions, но это может
                   изменить с помощью параметра -regextype.
    

    Этот ответ применяется, по крайней мере, к GNU find.

    -name совпадает с использованием шаблонов оболочки, если вы хотите выполнить сопоставление регулярных выражений, вместо этого используйте -regex :

      find . -regex '.*ook[s]?' -type f 

    -regex соответствует всему пути с использованием emacs regex. Тип регулярного выражения можно изменить с помощью параметра -regextype .

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