Localização dos arquivos no Unix cujos nomes e conteúdos de arquivos correspondem a uma expressão regular

0

Eu quero pesquisar nomes de arquivos com uma expressão regular e grep usando regex. Eu tentei isso:

find .  -name co_on*eruo* | xargs grep '0LF2C Comdty(.*)20111022(.*)'

Mas isso não funciona. O que estou fazendo incorretamente?

    
por Peter Mortensen 26.10.2011 / 04:45

3 respostas

0

find .  -regex co_on*eruo* | xargs grep '0LF2C Comdty(.*)20111022(.*)'
    
por 26.10.2011 / 04:48
0

Em primeiro lugar, exatamente como não funciona?

Você precisa citar o padrão (nota: não é uma regex) para evitar que o shell o expanda:

find .  -name 'co_on*eruo*' | xargs grep '0LF2C Comdty(.*)20111022(.*)'

EDITAR

Mas se realmente é para ser um regex (ou seja, você quer corresponder "co_o", então zero ou mais "n" s, então "eru", então zero ou mais "o" s), então como Tim diz que você precisa usar -regex em vez de -name . (Esse é provavelmente um recurso específico do GNU; se find --version não disser algo como find (GNU findutils) 4.4.2 , então seu find pode não suportar -regex .)

    
por 26.10.2011 / 04:49
0

Você não quis saber os parantheses na expressão grep ou onde eles estavam lá desde que você pensou que precisava deles para a funcionalidade regexp?

Como parece, você provavelmente pode fazer o que quiser com grep diretamente:

grep -R --include='co_on*eruo*' '0LF2C Comdty.*20111022.*'

Talvez você queira que -name abranja também os nomes de diretórios - isso não acontece. Dê mais informações sobre os caminhos exatos, se você quiser uma solução para isso.

    
por 27.03.2012 / 20:25

Tags