Problemas ao obter o regex para trabalhar com o find

2

Estou tendo muitos problemas para obter find para trabalhar com sinalizadores de regex. Estou usando egrep sozinho para encontrar um padrão de data em um arquivo, como este:

egrep '[0-9]{4}-[0-9]{2}-[0-9]{2}' 

que retornará datas formatadas como CCYY-MM-DD bem. Estou tentando usar esse mesmo padrão com find . Eu tentei:

find . -regextype egrep -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}"
find . -type f -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}"

Tentou contrariar as chaves ...

find . -type f -regextype egrep -regex "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}"

Todos estes não parecem retornar nada. Não recebo mensagens de erro, não há saída ... Eu até tentei redirecionar a saída para um arquivo, mas nada ...

É difícil encontrar bons recursos ao usar find com regex. Se alguém pudesse ajudar, eu agradeceria muito. Não me oponho a nenhum dos tipos de regex find supports, embora eu goste de egrep devido ao -o flag para retornar apenas as correspondências, NÃO a linha inteira. Mas realmente eu só preciso de find para encontrar todos os arquivos em um diretório que tenham uma correspondência de padrão acima no nome do arquivo.

    
por BryanK 05.11.2013 / 01:11

2 respostas

5

Seu exemplo mistura aspas simples e aspas duplas. E o find quer um padrão que corresponda a todo o nome do arquivo, então você quer começar / terminar o padrão com '*'.

Isso localizará todos os arquivos com o padrão que você descreve:

find yourpath -name "*[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]*"

Mas se você quiser usar o regextype, precisa do "posix-egrep" e observe com atenção que o regex precisa corresponder ao caminho inteiro,

find yourpath -regextype posix-egrep  -regex ".*[0-9]{4}-[0-9]{2}-[0-9]{2}.*"
    
por 05.11.2013 / 02:19
0

O primeiro exemplo deve ser:

find yourpath -name "*[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]*"
                               ^

Quarta faixa estava errada

    
por 06.12.2013 / 12:45