我想用正则表达式搜索文件名,并且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
跨越目录名称 - 但事实并非如此。如果您想要解决方案,请提供有关确切路径的更多信息。