如何在Linux上查找包含特定文本的所有文件?

想改进此帖子吗?提供此问题的详细答案,包括引文和解释您的答案正确的原因。没有足够详细信息的答案可能会被编辑或删除。

我试图找到一种方法来扫描我的整个Linux系统,查找包含特定文本字符串的所有文件。我只是想澄清一下,我是在文件中查找文本,而不是在文件名中

当我查找如何执行此操作时,我两次遇到此解决方案:

find/-typef-exec grep-H'文本在此处查找“{}”;

但是,它不工作。它似乎显示系统中的每个文件

这接近正确的方法吗?如果不是,我该怎么做?这种在文件中查找文本字符串的能力对于我正在做的一些编程项目非常有用

请执行以下操作:

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

除此之外,--exclude--include--exclude dir标志还可用于高效搜索:

  • 这将仅搜索扩展名为.c或.h的文件:
grep--include=\*.{c,h}-rnw'/path/to/somewhere/'-e“pattern”;
  • 这将排除搜索以.o扩展名结尾的所有文件:
grep--exclude=\*.o-rnw'/path/to/somewhere/'-e“pattern”;
  • 对于目录,可以使用--exclude dir参数排除一个或多个目录。例如,这将排除dirs dir1/、dir2/以及所有匹配*.dst/:
grep--exclude dir={dir1,dir2,*.dst}-rnw'/path/to/somewhere/'-e“pattern”;

这对我来说非常有效,可以达到与你几乎相同的目的

有关更多选项,请查看man grep

发表评论