【问题标题】:Why do my results appear to differ between ag and grep?为什么我的结果在 ag 和 grep 之间看起来不同?
【发布时间】:2016-12-19 01:29:14
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: regex bash shell grep ag


    【解决方案1】:

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

    man grep 会让你明白为什么-e 会出现这个错误。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-20
        • 1970-01-01
        • 2022-11-27
        • 2018-08-13
        • 2017-04-06
        • 2018-10-26
        • 2011-10-21
        • 1970-01-01
        相关资源
        最近更新 更多