Unix 上文件名和内容均与正则表达式匹配的文件的位置

Unix 上文件名和内容均与正则表达式匹配的文件的位置

我想用正则表达式搜索文件名,并且grep使用正则表达式。我尝试过这个:

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

但它不起作用。我做错了什么?

答案1

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

答案2

首先,如何不行吗?

您需要引用该模式(注意:它不是正则表达式)以防止 shell 对其进行扩展:

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

编辑

但如果这真的应该是一个正则表达式(即,您想要匹配“co_o”,然后是零个或多个“n”,然后是“eru”,然后是零个或多个“o”),那么正如 Tim 所说,您需要使用-regex而不是-name。 (这可能是 GNU 特有的功能;如果find --version没有说 之类的话find (GNU findutils) 4.4.2,那么您find可能不支持-regex。)

答案3

您是否不想在表达式中使用括号grep,或者它们只在那里,因为您认为需要它们来实现正则表达式功能?

从表面上看,您可以grep直接做您想做的事情:

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

也许您还想-name跨越目录名称 - 但事实并非如此。如果您想要解决方案,请提供有关确切路径的更多信息。

相关内容