使用终端在文件夹中查找文本

时间:2017-09-09 08:11:02

标签: macos search terminal grep

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

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

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

grep: warning: recursive search of stdin

我没有太多使用终端,所以我不确定如何做我想要的。任何帮助赞赏。感谢

大卫

4 个答案:

答案 0 :(得分:3)

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

brew install ack 
ack "text"

enter image description here

答案 1 :(得分: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所指出的,如果您要搜索简单文本而不是正则表达式,-F需要grep选项。我将它添加到上面的示例中,因为您似乎正在尝试搜索可能包含特殊字符的PHP片段,这会导致在regexp模式下输出不同。

答案 2 :(得分:0)

我建议试试ripgrep

$ brew install ripgrep

除了更快,它为您提供了多个选项,请查看examples

安装后只需要执行:

$ rg your-string 

答案 3 :(得分:0)

切勿在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'); ?>" {} +

如果那样做没有你想要的,那么在你的问题中提供样本输入/输出。