search - Linux在所有文件中查找一个文本字符串

  显示原文与译文双语对照的内容

我正在寻找一种方法来扫描我的整个Linux系统,为所有包含特定文本字符串的文件。 只是为了澄清,我在寻找文件中的文本,而不是文件名。

当我在寻找如何做到这一点的时候,我遇到了这个解决方案两次:


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

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

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

时间:

执行以下操作:


grep -rnw 'directory' -e"pattern"

-r 或者 -r 是递归的,-n 是行号,-w 代表整个单词。 -l ( 字母L ) 可以添加到只有文件名。

除了这些,--exclude 或者 --include 参数也可以用于高效搜索。 如下所示:


grep --include=*.{c,h} -rnw 'directory' -e"pattern"

这将只搜索具有. c 或者. h 扩展名的文件。 类似地,--exclude的示例使用:


grep --exclude=*.o -rnw 'directory' -e"pattern"

上将排除搜索以. o 扩展名结尾的所有文件。 就像排除文件一样,可以通过 --exclude-dir--include-dir 参数排除/包含目录,下面显示如何集成 --exclude-dir:


grep --exclude-dir={dir1,dir2,*.dst} -rnw 'directory' -e"pattern"

这对我来说很好,达到几乎相同的目的。

更多选项:

 
man grep

 

你可以使用 grep -ilR:


grep -Ril"text-to-find-here"/

  • i 代表上/小写字母( 在你的案例中可选) 。
  • R 代表递归。
  • l 代表"显示文件名,而不是结果 itself`"。

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

只需:


ack 'text-to-find-here'

在根目录中。

你也可以使用 正规表达式,指定文件类型,等等。


更新

我刚刚发现了的搜索器,它像ack但是 3 -5x比它更快,甚至忽略了 .gitignore 文件中的模式。

可以使用:


grep -r"string to be searched"/path/to/dir

R 代表递归,所以在指定的路径和它的sub-directories中搜索。 这将告诉你文件名,并打印出字符串所在的文件中的行。

或者类似于你正在尝试的命令( 例如: ) 在所有javascript文件中搜索( * 。js ):


find. -name '*.js' -exec grep -i 'string to search for' {} ; -print

这将打印出现文本但不打印文件名的文件中的行。

包含给定文本的文件名列表

首先,我相信你使用了 -H 而不是 -l 。 也可以尝试在引号内添加文本,后面加上 {}


find/-type f -exec grep -l"text-to-find-here" {} ; 

即使你不使用"文本"vs"文本",也可以使用 -i switch 来忽略大小写。 你可以在这里阅读更详细的细节 希望这对你有帮助。

如果你的grep 不支持递归搜索,你可以将 findxargs 组合在一起:


find/-type f | xargs grep 'text-to-find-here'

我发现这比 find -exec的格式更容易记住

以下是可以用来搜索文件的命令列表。


grep"text string to search" directory-path

grep [option]"text string to search" directory-path

grep -r"text string to search" directory-path

grep -r -H"text string to search" directory-path

egrep -R"word-1|word-2" directory-path

egrep -w -R"word-1|word-2" directory-path

即使我们不寻找字符串,也可以使用 grep 。

只是跑步


grep -RIl"". 

将打印出所有文本文件的路径
i.e 。只包含可以打印字符

...