提问者:小点点

如何找到Linux上包含特定文本(字符串)的所有文件?


如何在其文件内容中找到包含特定文本字符串的所有文件?

以下不起作用。它似乎显示系统中的每个文件。

find / -type f -exec grep -H 'text-to-find-here' {} \;

共3个答案

匿名用户

执行以下操作:

grep -rnw '/path/to/somewhere/' -e 'pattern'
  • -r-R是递归的,
  • -n是行号,而
  • -w代表匹配整个单词。
  • -l(小写L)可以添加以仅给出匹配文件的文件名。
  • -e是搜索过程中使用的模式

除此之外,--不包括--include--不包括目录标志可用于高效搜索:

>

  • 这只会搜索那些扩展名为. c或.h的文件:

    grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
    

    这将排除搜索所有以. o扩展名结尾的文件:

    grep --exclude=\*.o -rnw '/path/to/somewhere/' -e "pattern"
    

    对于目录,可以使用--exout-dir参数排除一个或多个目录。例如,这将排除dirsdy1/dy2/以及所有与*. dst/匹配的目录:

    grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/search/' -e "pattern"
    

    这对我来说非常有效,可以达到和你一样的目的。

    有关更多选项,请参阅man grep

  • 匿名用户

    使用grep-ilR

    grep -Ril "text-to-find-here" /
    
    • i代表忽略大小写(在您的情况下可选)。
    • R代表递归。
    • l代表“显示文件名,而不是结果本身”。
    • /代表从机器的根目录开始。

    匿名用户

    你可以使用ack。它就像源代码的grep。您可以使用它扫描整个文件系统。

    只是做:

    ack 'text-to-find-here'
    

    在您的根目录中。

    您还可以使用正则表达式、指定文件类型等。

    更新

    我刚刚发现了The Silver Searcher,它类似于ack,但比它快3-5倍,甚至忽略了. gitignore文件中的模式。