Выражение в фигурных скобках не работает в регулярном выражении find

Выражение в фигурных скобках не работает в регулярном выражении find

У меня есть две папки, CA01и CA02в текущей папке foo:

foo -+
     |
     +-CA01
     |
     +-CA02

Когда я печатаю

find . -regex ".*CA[0-9]+" -exec echo {} +

Или

find . -regex ".*CA[0-9][0-9]" -exec echo {} +

У меня получился следующий результат, как и ожидалось:

./CA01 ./CA02

Но когда я печатаю

find . -regex ".*CA[0-9]\{2\}" -exec echo {} +

Ничего не появляется, что весьма неожиданно.

Потому что по умолчанию findиспользуется emacs regex. Я мог бы использовать все вышеперечисленное, чтобы сопоставить две папки.

Я что-то упустил?

решение1

Вам нужно изменить -regextypeна тот, который поддерживает подсчет повторений (т.е. {2}). Тип по умолчанию, emacsпохоже, не поддерживает подсчеты. Тип регулярного выражения по умолчанию имитирует старую версию Emacs, в которой не было синтаксиса для подсчета повторений. Типы ниже, похоже, работают для меня.

Примеры

posix-egrep

$ find foo -regextype posix-egrep -regex ".*CA[0-9]{2}" -exec echo {} +
foo/CA02 foo/CA01

сед

$ find foo -regextype sed -regex ".*CA[0-9]\{2\}" -exec echo {} +
foo/CA02 foo/CA01

posix-расширенный

$ find foo -regextype posix-extended -regex ".*CA[0-9]{2}" -exec echo {} +
foo/CA02 foo/CA01

Есть и другие, но я больше не пробовал. Смотрите findстраницу man и ищите -regextype.

выдержка

-regextype type
       Changes  the  regular  expression  syntax  understood by -regex and 
       -iregex tests which occur later on the command line.  Currently
       implemented types are emacs (this is the default), posix-awk, 
       posix-basic, posix-egrep and posix-extended.

Моя версия находки

$ find -version
find (GNU findutils) 4.5.9
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Built using GNU gnulib version 1778ee9e7d0e150a37db66a0e51c1a56755aab4f
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2) 

Связанный контент