如何在 Linux 的文件树中递归查找短语/单词?

Ita*_*vka 9 linux grep find find-in-files

如何在 Linux 的文件树中递归查找短语/单词?
我试过了find . -name ./* | grep my_phrase ,我试过了grep -r "register_long_arrays" *

Ian*_*non 14

grep -r "register_long_arrays" *
Run Code Online (Sandbox Code Playgroud)

将递归查找register_long_arrays当前目录中所有出现的。

如果你想结合find使用grep来限制搜索的文件类型,你应该像这样使用它(这个例子将搜索限制为文件结尾.txt):

find . -name '*.txt' -exec grep "register_long_arrays" {} \;
Run Code Online (Sandbox Code Playgroud)

{}替换为find找到的每个文件,而不必担心转义空格等问题字符。注意分号前的反斜杠。这确保分号被转义并传递给 exec 子句 (grep),而不是终止 find 命令。

如果您仍然没有找到您想要的内容,则可能是大小写问题,(将-i标志提供给 grep 以忽略大小写)或者您想要的内容可能位于隐藏文件中(以 开头.),该文件*将不匹配,其中case 提供*.*作为 grep 的参数。

  • 您的 `find ... -exec grep` 命令不会显示包含该字符串的文件的文件名,因为每次调用 grep 时都会使用一个文件名。我建议使用 xargs 来调用 grep 以提高效率(请参阅其他一些回复)。即使使用 xargs,grep 也可能只使用单个文件名调用,因此使用旧的 sk00l 习惯用法 `xargs grep register_long_arrays /dev/null` 来欺骗 grep,或使用 `grep -H`(一种 GNU 主义)。 (2认同)

hot*_*tei 0

find . -exec grep my_phrase {} \;
Run Code Online (Sandbox Code Playgroud)

find生成当前目录或当前目录下所有文件的列表。将为找到的每个文件exec执行该命令。grep my_phrase\;只是让它发挥作用的魔法。通常可以使用 来查看其工作原理的详细信息man find

如果您不仅想知道是否找到了它,还想知道在哪里找到它,您可能还想查看-H选项。grep