我正在尝试在文件夹中找到一行代码并使用终端。我使用这个命令,我觉得应该可以工作:
MacBook-Pro:myWordpress myId$ grep "<?php get_template_part('loop', 'archives'); ?>" -R
我正在检查的文件夹名为“myWordpress”。但我明白了:
grep: warning: recursive search of stdin
我没有太多使用终端,所以我不确定如何做我想要的。任何帮助赞赏。感谢
大卫
答案 0 :(得分:3)
答案 1 :(得分:1)
您必须将目录指定为最后一个参数:
grep -r -F "string to search" /path/to/dir
或者,如果要在当前目录中搜索,请将.
写为目标目录:
grep -r -F "string to search" .
如果您没有指定目录,grep
将尝试搜索标准输入,但递归搜索在那里没有意义 - 这就是您收到警告的原因。
并非所有grep实现都支持-r,而在这些实现中,符号链接的行为可能会有所不同。
在这种情况下,您可以使用find
和xargs
尝试不同的方法:
find /path/to/dir -name '*.*' -print0 | xargs -0r grep -F "string to search"
同样,如果要在当前目录中搜索,可以将.
写为目录参数(在find
之后)。
编辑,如@EdMorton所指出的,如果您要搜索简单文本而不是正则表达式,-F
需要grep
选项。我将它添加到上面的示例中,因为您似乎正在尝试搜索可能包含特殊字符的PHP片段,这会导致在regexp模式下输出不同。
答案 2 :(得分:0)
答案 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'); ?>" {} +
如果那样做没有你想要的,那么在你的问题中提供样本输入/输出。