Соответствие подвыражению регулярного выражения в режиме Find + emacs-regex - PullRequest
0 голосов
/ 07 октября 2010

Я пытаюсь найти сжатые файлы журнала и выполнить с ними некоторые операции. Я не могу использовать ls, потому что это тысячи файлов в каталоге, а BASH выдает ошибку «список аргументов слишком длинный». Это привело меня к поиску, но у меня возникли проблемы с моим регулярным выражением.

Вот вся команда поиска

find $i -regex '.*logfile_MP[0-9]-GW0[0-9]_2010-09-\(\([7-9]\)|\(1[0-9]\)|\(2[0-3]\)\)-.*' -exec ls {} \;

Мне действительно нужно пройти через несколько каталогов журналов, поэтому $ i происходит из цикла BASH, чтобы пройти по всем каталогам. Сейчас я просто пытаюсь составить список файлов, поэтому я знаю, что у меня есть нужные файлы; Я исправлю свое утверждение -exec, как только оно заработает.

Проблема связана с разделом скобок:

\(\([7-9]\)|\(1[0-9]\)|\(2[0-3]\)\)

Я пытаюсь соответствовать диапазону дней (7-23). Из того, что я понимаю о режиме Emacs-regex, я должен убрать все скобки. Остальная часть регулярного выражения работает, потому что, если я заменю секцию скобок только числом (например, 7), он будет работать нормально.

Может ли кто-нибудь помочь мне создать регулярное выражение для соответствия 7-23?

Спасибо.

1 Ответ

1 голос
/ 07 октября 2010

Я думаю, что вы на правильном пути, просто пропускаете \ перед каждым из |:

\([7-9]\|1[0-9]\|2[0-3]\)
...