знайти команду з кількісним показником regex, наприклад {1,2}


14

Я намагався створити командний рядок find, який знайде всі файли, які закінчуються цифрою 1-99, але виключають усі інші.

Наприклад, я хочу знайти myfile1 myfile99, але не myfile456 і не myfilebackup

Регекс, про який я думаю, є, myfile[1-9]{1,2}але я не можу з цим працювати.

find . -regex '.*myfile[0-9]{1,2}' АБО find . -iname 'myfile[0-9]{1,2}'

З того, що я бачу, це {1,2}частина, яка не працює.

(до речі, ви можете користуватися -name -regexбеззмістовно?)

Будь-яка допомога вдячна.


1
-iname-name) використовувати глобуси , у яких немає цього синтаксису.
l0b0

Відповіді:


10

Ви можете спробувати

find . -regex '.*myfile[0-9][0-9]?'

або

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)

Спасибі - перший рядок працює для мене. Я спробував це з -iname, але я не думаю, що він підтримує синтаксис, інакше я щось неправильно роблю.
Лукас88

17

Якщо ви знайдете GNU, ви можете використовувати інший тип регулярного вираження:

find . -regextype sed -regex '.*myfile[0-9]\{1,2\}'

Згідно з даними GNU, за замовчуванням findвикористовує нейтралізований синтаксис регулярного вираження Emacs - Emacs підтримує \{from,to\}синтаксис, але принаймні GNU findне підтримує його.

Як не дивно, довідковий посібник не містить розділу про sedсинтаксис регулярного вираження, тому хто знає, які його частини підтримуються.


1
sedяк, edздається, псевдонім для posix-basic, тому має бути сумісним з POSIX BRE (хоча підтримує такі розширення, як \+). Він не сумісний з GNU, sedколи, наприклад, [\n]відповідає новій лінії замість зворотної косої риси або nвимагається POSIX. Дивіться також -regextype posix-extendedпро POSIX ERE (так .*myfile[0-9]{1,2}), також із розширеннями типу \sабо\<
Stéphane Chazelas

Я ніколи не знав про -regextype. Здається, що якщо ви користуєтесь, -regextype egrepто, здається, ви зможете уникнути відхилень.
Шрідхар Сарнобат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.