Find | grep 在 Cygwin 中不起作用

Find | grep 在 Cygwin 中不起作用

我已经安装了 cygwin,当我用这个命令搜索源代码时,什么也没有显示出来,即使我在文件中有这个字符串

$ echo foo > bar
$ find . -name '*' | grep foo

什么都没显示。此命令在 GNU+Linux 上运行良好。

$ grep foo bar

答案1

如上所述,find 将找到的文件列表输出到 stdout,如果以这种方式调用,grep 通常会通过 stdout 进行搜索。

xargs也可以通过管道将 find 传递到从标准输入构建并执行命令行“,例如

$ find . | xargs grep foo

如果你有疯狂的文件名,带有换行符和诸如此类的东西,那么这会更好:

$ find . -type f -print0 | xargs -0 grep foo

并且只会找到常规文件,因此不会尝试通过任何或或任何目录或“有趣”的文件-type f进行 grep 。...

答案2

find . -name  '*' # This will produce a list of *file names*

然后将文件名列表传递给grepstdin,它会将列表视为文本并搜索foo

您没有文件名,foo因此它不返回任何内容。

要通过文件递归搜索查找文件中的文本,您只需使用

grep -R foo somefolder/

答案3

当我用这个命令搜索源代码时,什么也没有出现

$ echo foo > bar
$ find . -name '*' | grep foo

find搜索符合所需条件的文件名:名称、大小、文件类型,并返回匹配文件名的列表。它不返回内容匹配的文件。

grep当使用管道运算符传递文件名列表时,grep将看到字符串bar(文件名)和不是 foo(文件的内容bar)。

grep因此没有找到匹配项,所以没有任何内容可输出。

笔记:

  • grep可以直接搜索文件。您不需要使用find. 管道|,或者xargs按照另一个答案中的建议。

以下命令适用于 Cygwin:

grep --exclude-dir=* "foo" ./*

例子:

DavidPostill@Hal /f/test
$ cat bar
foo

DavidPostill@Hal /f/test
$ grep --exclude-dir=* "foo" ./*
./bar:foo

进一步阅读

  • Linux 的 Bash 命令行的 AZ 索引- 与 Bash 命令行相关的所有事物的绝佳参考。
  • 寻找- 在文件夹层次结构中搜索符合所需条件的文件名:名称、大小、文件类型。
  • grep- 在文件中搜索特定文本。

答案4

我想你想要这个。

find . -name '*' -type f -exec grep foo /dev/null {} \;

您只想 grep 文件,而不是目录或特殊文件。/dev/null 使 grep 显示文件名。您可能想摆脱 '-name '*',但如果您这样做,那么将 grep 点文件。

你也可以运行

grep -r foo .

相关内容