grep 不会递归

Cod*_*all 8 grep

每当我将 grep 与gnuwin32的递归选项一起使用-r并包含要搜索的文件的 glob 模式(例如*.c)时,不会搜索子目录中的文件。我正在使用来自 gnuwin32 的最新 grep。

具体来说,我在一个目录中的所有 c 源文件中搜索字符串“iflag”。

grep -r iflag *.c
Run Code Online (Sandbox Code Playgroud)

Cod*_*all 7

我不确定为什么递归标志不起作用,但这里有一个对我有用的解决方法。-r选项接受一个参数:要搜索的目录。要搜索当前目录,请为其提供参数.。例如

grep regexp-to-find -r . --include=*.c

编辑

这实际上是 grep 的预期行为,与在 Windows 上运行它无关。该-r选项采用目录参数。查看 HairOfTheDog 的答案以了解原因。


Hai*_*Dog 5

grep的的-r选项(这是一样的-R--recursive-d recurse--directories=recurse选项)将一个目录名(或模式)作为其参数。您尝试执行的命令应该被解释为“从当前工作目录开始递归所有匹配模式 *.c 的目录。在每个目录中搜索字符串 iflag 的所有文件。”

  • @PJBrunet 您的问题与 OP 基本相同。Grep 并不像您(和我)认为的那样工作。如果您想递归搜索当前目录中的字符串“whatever”,但仅在匹配模式“*.php”的文件中搜索,那么您的命令将是 `grep -r nothing 。--include *.php` (4认同)

归档时间:

查看次数:

3411 次

最近记录:

4 年,9 月 前