find . -regex co_on*eruo* | xargs grep '0LF2C Comdty(.*)20111022(.*)'
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?
find . -regex co_on*eruo* | xargs grep '0LF2C Comdty(.*)20111022(.*)'
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
.)
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.