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

Why do my results appear to differ between ag and grep?

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

做我想做的事

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

在我的当前目录中(递归地?)搜索包含单词 "nested" 和 "merge"

的文件

使用 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

我错过了什么?另外,这两种方法都可以改进吗?

谢谢!

您可能想要 -E 而不是 -e,或者只是 egrep

一个man grep会让你明白为什么-e给你那个错误。

您可以使用 grep -lr 'nested.*merge\|merge.*nested'grep -Elr 'nested.*merge|merge.*nested' 来处理您的情况。
此外,对于后一种,E 表示使用 ERE 正则表达式语法,因为 grep 将默认使用 BRE,其中 | 将匹配字符 |\| 表示 or
有关EREBRE的更多详细信息,您可以阅读this article