为什么我的结果在 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
。
有关ERE
和BRE
的更多详细信息,您可以阅读this article
我无法正确(安全地)使用 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
。
有关ERE
和BRE
的更多详细信息,您可以阅读this article