2

Команда

find . -maxdepth 1 -regextype posix-egrep -regex '.*/[a-z0-9\-\_\.]+\.(gz|deb)/' -exec echo {} \;

не дает результатов в каталоге, содержащем следующие файлы:

  1. google-chrome-stable_current_i386.deb
  2. rkhunter-1.4.2.tar.gz

хотя при тестировании регулярного выражения [a-z0-9\-\_\.]+\.(gz|deb) на сайтах, таких как RegExr, соответствует этим именам.

Почему find не возвращает никаких результатов?

1 ответ1

2

Две причины:

  1. Вы закончили свою строку регулярного выражения с / .  Имена файлов не заканчиваются на / .
  2. Очевидно, что у RegExr есть ошибка: чтобы включить буквенную черту (-) в выражение в скобках регулярного выражения, это должен быть первый символ, сразу после [ (или после начального ^ , если есть), или последний символ, непосредственно перед ] .  Вам не разрешено вставлять его посередине, даже если перед ним стоит \ .

Но также:

  1. ^ , - , [ и ] являются единственными отдельными символами, которые являются специальными в выражении в виде регулярного выражения; вам не нужно убегать . - и нет никакой причины убегать _ .

Таким образом, ваше регулярное выражение может / должно быть .*/[-a-z0-9_.]+\.(gz|deb) .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .