Localizar e regex

4

O que estou fazendo de errado com essa expressão de busca?

; touch ook ooks
; find . -name 'ook' -or -name 'ooks' -type f
./ook
./ooks
; find . -name 'ook[s]?' -type f      
[returns nothing]
; echo $?
0
    
por Sardathrion 25.07.2012 / 11:28

2 respostas

9

Você está confundindo expressões regulares com padrões de pesquisa de shell.

na casca significa qualquer caractere único.

em regexp significa que o caractere anterior (ou sub-padrão) é opcional.

Tente:

find . -regex '.*ooks?' -type f

Na página de manual do encontro:

       -regex pattern
              File  name  matches regular expression pattern.  This is a match
              on the whole path, not a search.  For example, to match  a  file
              named './fubar3', you can use the regular expression '.*bar.' or
              '.*b.*3', but not 'f.*r3'.  The regular  expressions  understood
              by  find  are by default Emacs Regular Expressions, but this can
              be changed with the -regextype option.
    
por 25.07.2012 / 11:50
5

Esta resposta se aplica pelo menos ao GNU find.

-name corresponde a padrões de shell, se você quiser fazer o uso de regex usando -regex :

 find . -regex '.*ook[s]?' -type f

-regex corresponde ao caminho inteiro usando o regex do emacs. O tipo de expressão regular pode ser alterado com -regextype .

    
por 25.07.2012 / 11:50