为什么我的结果在ag和grep之间显得不同?

时间:2016-12-19 01:29:14

标签: regex bash shell grep ag

我无法正确(并且安全地)使用grep执行正确的正则表达式搜索。我似乎能够使用ag

做我想做的事

我想用简单的英语做什么:

搜索当前目录(递归?),查找包含“嵌套”和“合并”字样的行的文件

使用ag成功尝试:

$ ag --depth=2 -l "nested.*merge|merge.*nested" .
   scratch.md
   scratch.rb

使用grep:

尝试失败
$ grep -elr 'nested.*merge|merge.*nested' .
   grep: nested.*merge|merge.*nested: No such file or directory
   grep: .: Is a directory

我错过了什么?此外,是否可以改进方法?

谢谢!

2 个答案:

答案 0 :(得分:3)

您可能希望-E不是-e,或只是egrep

man grep会让您了解-e为什么会给您错误。

答案 1 :(得分:0)

您可以使用grep -lr 'nested.*merge\|merge.*nested'grep -Elr 'nested.*merge|merge.*nested'作为案件 此外,对于后者,E表示使用ERE正则表达式语法,因为grep默认使用BRE,其中|将匹配字符{{ 1}}和|表示\| 有关orERE的详细信息,请参阅this article