【问题标题】:Finding text inside a folder using terminal使用终端在文件夹中查找文本
【发布时间】:2017-09-09 08:11:02
【问题描述】:

我正在尝试在文件夹中查找一行代码并使用终端。我使用这个命令,我认为它应该可以工作:

MacBook-Pro:myWordpress myId$ grep "<?php get_template_part('loop', 'archives'); ?>" -R

我正在检查的文件夹称为“myWordpress”。但我明白了:

grep: warning: recursive search of stdin

我很少使用终端,所以我不确定如何做我想做的事。任何帮助表示赞赏。谢谢

大卫

【问题讨论】:

  • 如果要在当前目录下的所有HTM/HTML文件中搜索pattern,使用grep "pattern" *htm*
  • 如果要在当前目录的所有文件中搜索string,请使用grep "string" *

标签: macos search terminal grep


【解决方案1】:

您还必须指定目录作为最后一个参数:

grep -r -F "string to search" /path/to/dir

或者如果你想在当前目录中搜索,写.作为目标目录:

grep -r -F "string to search" .

如果您不指定目录,grep 将尝试在标准输入中搜索,但递归搜索在那里没有意义 - 这就是您收到警告的原因。

manpage for grep 说:

并非所有 grep 实现都支持 -r,在那些支持的实现中,符号链接的行为可能会有所不同。

在这种情况下,您可以尝试不同的方法,使用findxargs

 find /path/to/dir -name '*.*' -print0 | xargs -0r grep -F "string to search"

同样,如果你想在当前目录中搜索,你可以写.作为目录参数(find之后)。

编辑: 正如@EdMorton 指出的那样,如果您想搜索简单文本而不是正则表达式,grep 需要-F 选项。我将它添加到上面的示例中,因为您似乎正在尝试搜索可能包含特殊字符的 PHP sn-ps,这将导致正则表达式模式下的不同输出。

【讨论】:

  • 对不起,我忘了提,我已经在我要查看的目录中。我已经尝试过 grep -r "string to search" 并且它返回相同的 grep: warning: recursive搜索标准输入
  • 你有没有像我说的那样尝试使用.作为最后一个参数?
  • @EdMorton 感谢您指出这一点!我将其添加到我的答案中。
【解决方案2】:

对于 macOS,这将非常有用和简单,并且它还突出显示文本的搜索结果匹配!

brew install ack 
ack "text"

【讨论】:

  • 这对我有帮助。谢谢
【解决方案3】:

我建议尝试ripgrep

$ brew install ripgrep

除了速度更快之外,它还为您提供多种选择,请查看examples

安装完成后,只需执行以下操作:

$ rg your-string 

【讨论】:

    【解决方案4】:

    切勿在 grep 中使用 -r-R。这是一个糟糕的想法,完全没有必要(用于查找文件的 UNIX 工具名为 find!),并使您的代码特定于 GNU。

    如果没有任何示例输入/输出,我能说的最好的就是:

    grep "<?php get_template_part('loop', 'archives'); ?>" *
    

    或者如果您在当前目录中有文件和目录但只想在文件中搜索:

    find . -type f -maxdepth 1 -exec grep -H "<?php get_template_part('loop', 'archives'); ?>" {} +
    

    或在所有子目录中搜索:

    find . -type f -exec grep -H "<?php get_template_part('loop', 'archives'); ?>" {} +
    

    如果这不能满足您的要求,请在您的问题中提供示例输入/输出。

    【讨论】:

    • 谢谢你,它让我更进一步。它回来了:grep:wp-admin:是一个目录grep:wp-content:是一个目录grep:wp-includes:是一个目录-我基本上是想在wordpress文件夹中找到一些代码,所以它只是带着wordpress文件夹内的文件夹回来。我知道线路在某处,但我以前从未使用过终端。谢谢
    • 我们正在努力解决的是您是否要在 当前 目录中搜索(它们是 UNIX 中的目录,而不是文件夹 - 这是 Windows 术语),或者是否除了当前目录之外,您还需要在子目录中进行搜索。再次,编辑您的问题以澄清并提供您尝试搜索的示例文件以及有关您的目录层次结构和需求的一些信息。我已经用更多脚本示例更新了我的答案,以解决您可能正在尝试做的事情。
    猜你喜欢
    • 2014-04-04
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2015-10-03
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多