Я пытался создать командную строку find, которая найдет все файлы с номерами 1-99, но исключит все остальные.
например, я хочу найти myfile1 myfile99, но не myfile456 и не myfilebackup
Регулярное выражение, о котором я думаю, - myfile[1-9]{1,2}
но я не могу заставить это работать с find.
find . -regex '.*myfile[0-9]{1,2}'
ИЛИ
find . -iname 'myfile[0-9]{1,2}'
Из того, что я вижу, это та {1,2}
часть, которая не работает.
(кстати, вы можете использовать -name -regex
взаимозаменяемо?)
Любая помощь приветствуется.
bash
find
regular-expression
Lukas88
источник
источник
-iname
(и-name
) использовать глобусы , которые не имеют этот синтаксис.Ответы:
Вы могли бы попробовать
или
источник
Если у вас есть GNU find, вы можете использовать другой тип регулярного выражения:
Согласно GNU по умолчанию
find
используется стерилизованный синтаксис регулярных выражений Emacs - Emacs поддерживает\{from,to\}
синтаксис, но по крайней мере GNUfind
его не поддерживает.Как ни странно, в справочном руководстве нет раздела о
sed
синтаксисе регулярных выражений, поэтому кто знает, какие его части поддерживаются.источник
sed
какed
представляется, является псевдонимомposix-basic
, поэтому должна быть совместима с POSIX BRE (хотя поддерживает некоторые расширения , например\+
). Он не совместим с GNU,sed
где, например,[\n]
соответствует символу новой строки вместо обратной косой черты илиn
требуется POSIX. Смотрите также-regextype posix-extended
о PREIX ERE (также.*myfile[0-9]{1,2}
), также с такими расширениями, как\s
или\<
-regextype egrep
кажется, что вы можете избежать обратной косой черты.