find -regex не розпізнає \ d цифру


2

У мене структура каталогів виглядає наступним чином:

processor0/10
processor0/10.1
processor0/10.2
processor1/10
processor1/10.1
processor1/10.2
 ...etc...
processor7/10
processor7/10.1
processor7/10.2

Я хотів би "знайти" всі каталоги, які є 10.1 або 10.2.

Наступні роботи:

$ find . -type d -regextype posix-egrep -regex '\./processor[0-9]*/10\.(1|2)'

але це не так:

$ find . -type d -regextype posix-egrep -regex '\./processor\d*/10\.(1|2)'

Я не впевнений, чому, оскільки egrep повинен розуміти, що \ d - це цифра. Хтось може це пояснити?

Це знаходження командного рядка на 64-розрядному Ubuntu - зокрема (GNU findutils) 4.4.2

З повагою, Мадлен


Можливий дублікат. stackoverflow.com/questions/3185457 / ...
jready

Відповіді:


2

Це тому, що \dпозначає десятковий символ у сумісних регулярних виразах Perl, який не підтримується find.

Ви можете скористатися класом символів [:digit:]:

find . -type d -regextype posix-egrep -regex '\./processor[[:digit:]]*/10\.(1|2)'

Ви також можете посилатися на регулярні вирази .


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