A expressão de brace não funciona no find regex

1

Eu tenho duas pastas, CA01 e CA02 na pasta atual, foo :

foo -+
     |
     +-CA01
     |
     +-CA02

Quando eu digito

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

Ou

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

Eu tenho a seguinte saída, que é esperada:

./CA01 ./CA02

Mas quando eu digito

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

Nada aparece, o que é bastante inesperado.

Porque, por padrão, find usa o regex do emacs. Eu poderia usar todos os itens acima para combinar com as duas pastas.

Estou faltando alguma coisa aqui?

    
por gongzhitaao 02.10.2013 / 04:41

1 resposta

1

Você precisa alterar o -regextype para um que suporte contagens de repetição (ou seja, {2} ). O padrão, emacs não parece suportar as contagens. O tipo de regex padrão imita uma versão mais antiga do Emacs que não possui uma sintaxe para contagens de repetição. Os tipos abaixo parecem funcionar para mim.

Exemplos

posix-egrep

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

sed

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

posix-extended

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

Existem outros, mas eu não tentei mais. Veja a página find man e procure por -regextype .

trecho

-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.

Minha versão do find

$ 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) 
    
por 02.10.2013 / 05:06