6528

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

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

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

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

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

4

53 回答 53

11971

请执行下列操作:

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参数排除一个或多个目录。例如,这将排除目录 dir1/、dir2/ 以及所有匹配 *.dst/ 的目录:
grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"

这对我来说非常有效,可以实现与您几乎相同的目的。

更多选项检查man grep

于 2013-06-06T08:21:35.803 回答
1910

您可以使用grep -ilR

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

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

做就是了:

ack 'text-to-find-here'

在您的根目录中。

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


更新

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

于 2013-06-06T08:26:58.343 回答
256

您可以使用:

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

代表递归,因此将r在指定的路径及其子目录中进行搜索。这将告诉您文件名并打印出文件中出现字符串的行。

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

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

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

除了这个命令,我们也可以这样写: grep -rn "String to search" /path/to/directory/or/file -r: recursive search n: 将显示匹配的行号

于 2014-03-14T23:29:14.437 回答
143

你可以使用这个:

grep -inr "Text" folder/to/be/searched/
于 2013-07-31T13:44:05.597 回答
113

grepGNUBSD

您可以使用grep工具递归搜索当前文件夹,例如:

grep -r "class foo" .

注意:-r- 递归搜索子目录。

您还可以使用通配符语法在特定文件中进行搜索,例如:

grep "class foo" **/*.c

注意:通过使用globbing 选项( **),它会递归地扫描具有特定扩展名或模式的所有文件。要启用此语法,请运行:shopt -s globstar您也可以**/*.*用于所有文件(不包括隐藏且无扩展名)或任何其他模式。

如果您有参数太长的错误,请考虑缩小搜索范围,或改用find语法,例如:

find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'

或者,使用ripgrep.

ripgrep

如果您正在处理较大的项目或大文件,则应ripgrep改为使用,例如:

rg "class foo" .

查看GitHub 项目页面上的文档、安装步骤或源代码。

它比任何其他工具(如GNU / BSD grepucgagsift、或类似工具)都快得多ackpt因为它建立在Rust 的正则表达式引擎之上,该引擎使用有限自动机、SIMD 和积极的文字优化来使搜索非常快速。

它支持.gitignore文件中指定的忽略模式,因此单个文件路径可以同时与多个 glob 模式匹配。


您可以使用常用参数,例如:

  • -i- 不敏感的搜索。
  • -I- 忽略二进制文件。
  • -w- 搜索整个单词(与部分单词匹配相反)。
  • -n- 显示你的比赛线。
  • -C/ --context(eg -C5) - 增加上下文,所以你可以看到周围的代码。
  • --color=auto- 标记匹配的文本。
  • -H- 显示找到文本的文件名。
  • -c- 显示匹配行数。可以与-H.
于 2015-05-09T10:11:46.483 回答
96

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

首先,我相信你已经使用-H了而不是-l. 您也可以尝试在引号内添加文本,后跟{} \.

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

例子

假设您正在目录中搜索包含特定文本“Apache License”的文件。它将显示类似于下面的结果(输出将根据您的目录内容而有所不同)。

bash-4.1$ find . -type f -exec grep -l "Apache License" {} \; 
./net/java/jvnet-parent/5/jvnet-parent-5.pom
./commons-cli/commons-cli/1.3.1/commons-cli-1.3.1.pom
./io/swagger/swagger-project/1.5.10/swagger-project-1.5.10.pom
./io/netty/netty-transport/4.1.7.Final/netty-transport-4.1.7.Final.pom
./commons-codec/commons-codec/1.9/commons-codec-1.9.pom
./commons-io/commons-io/2.4/commons-io-2.4.pom
bash-4.1$ 

删除区分大小写

即使您不使用“text”与“TEXT”之类的大小写,也可以使用-i开关忽略大小写。您可以在此处阅读更多详细信息。

希望这对您有所帮助。

于 2013-11-09T13:18:48.197 回答
65

如果您grep不支持递归搜索,您可以find结合xargs

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

我发现这比find -exec.

这将输出匹配行的文件名和内容,例如

/home/rob/file:text-to-find-here

您可能要添加到的可选标志grep

  • -i- 不区分大小写的搜索
  • -l- 只输出找到匹配的文件名
  • -h- 只输出匹配的行(不是文件名)
于 2014-06-20T08:49:18.983 回答
53
grep -insr "pattern" *
  • i:忽略 PATTERN 和输入文件中的大小写区别。
  • n: 在其输入文件中使用从 1 开始的行号为每行输出添加前缀。
  • s:抑制有关不存在或不可读文件的错误消息。
  • r:递归读取每个目录下的所有文件。
于 2016-02-26T05:47:29.260 回答
51

有一个名为The Silversearcher的新实用程序

sudo apt install silversearcher-ag

它与 Git 和其他 VCS 密切合作。所以你不会在.git或其他目录中得到任何东西。

你可以简单地使用

ag "Search query"

它会为你完成任务!

于 2016-11-03T21:30:23.463 回答
46

如何在 Linux 上找到包含特定文本的所有文件?(...)

我两次遇到这个解决方案:

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


如果在您的示例中使用find ,最好在命令末尾添加-s( --no-messages)grep和,以避免由and发出大量Permission denied消息:2>/dev/nullgrepfind

find / -type f -exec grep -sH 'text-to-find-here' {} \; 2>/dev/null

find是在类 Unix 平台上搜索文件的标准工具 - 在查找特定文本时与 grep 结合使用。顺便说一句, find命令通常与xargs结合使用。

出于相同目的,存在更快、更简单的工具 - 见下文。最好尝试一下,前提是它们可以在您的平台上使用,当然:

更快更简单的替代方案

RipGrep - 最快的搜索工具:

rg 'text-to-find-here' / -l

白银搜索者

ag 'text-to-find-here' / -l

确认

ack 'text-to-find-here' / -l

注意:您也可以添加2>/dev/null到这些命令中,以隐藏许多错误消息。


警告除非你真的无法避免,否则不要从“/”(根目录)搜索,以免搜索时间长且效率低!所以在上面的例子中,你最好用一个子目录名称替换' / ',例如“/home”,这取决于你实际想要搜索的位置......

于 2015-11-25T14:16:53.733 回答
37

尝试:

find . -name "*.txt" | xargs grep -i "text_pattern"
于 2014-12-10T05:47:34.487 回答
33

用于pwd从您所在的任何目录中搜索,向下递归

grep -rnw `pwd` -e "pattern"

更新 根据您使用的 grep 版本,您可以省略pwd. 如果没有给出目录,则在较新版本上.似乎是 grep 的默认情况:

grep -rnw -e "pattern"

或者

grep -rnw "pattern"

会做和上面一样的事情!

于 2016-05-28T12:47:43.497 回答
27
grep -lrnw '/root/Desktop/ipozal' -e 'geolocation'

例如:

  • 我的文件夹名称是“ ipozal
  • 它放在“ /root/Desktop
  • 我想在“地理定位”中的所有文件上找到此文本
于 2019-12-20T00:01:10.107 回答
25

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

简单的跑步,

grep -RIl "" .

将打印出所有文本文件的路径,即那些只包含可打印字符的文件。

于 2014-04-09T19:51:44.617 回答
24

如果您严格要使用,请find使用find + grep

find /path/to/somewhere/ -type f -exec grep -nw 'textPattern' {} \;

步骤

  1. 用于find搜索文件,
  2. grep对所有这些执行。

这使您find能够查找文件。

  • -name Pattern如果您只想访问grep某些文件,请使用:

find /path/to/somewhere/ -type f -name \*.cpp -exec grep -nw 'textPattern' {} \;

您可以使用不同的选项find来改进文件搜索。

于 2018-06-25T12:11:39.610 回答
23

Silver Searcher 是一个了不起的工具,但 ripgrep 可能会更好。

它适用于 Linux、Mac 和 Windows,几个月前在Hacker News上发表了文章(这里有一个 Andrew Gallant 博客的链接,其中有一个 GitHub 链接):

Ripgrep - 一个新的命令行搜索工具

于 2016-12-13T05:48:40.687 回答
21

以下是可用于搜索文件的几个命令列表。

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
于 2014-02-01T05:47:35.760 回答
21

我对grep使用 'rl' 的简单程度很着迷:

grep -rl 'pattern_to_find' /path/where/to/find

-r to recursively find a file / directory inside directories..
-l to list files matching the 'pattern'

使用不带 'l' 的 '-r' 来查看文件名,后跟找到模式的文本

grep -r 'pattern_to_find' /path/where/to/find

它工作得非常完美......

于 2017-08-08T09:38:47.920 回答
19
find /path -type f -exec grep -l "string" {} \;

来自评论的解释

find 是一个命令,可让您在给定路径的子目录中查找文件和其他对象,例如目录和链接。如果您未指定文件名应满足的掩码,它将枚举所有目录对象。

-type f specifies that it should proceed only files, not directories etc.
-exec grep specifies that for every found file, it should run grep command, passing its filename as an argument to it, by replacing {} with the filename
于 2014-07-02T07:18:24.583 回答
19

希望这对您有帮助...

扩展grepa 位以在输出中提供更多信息,例如,获取文本所在文件中的行号,可以按如下方式完成:

find . -type f -name "*.*" -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searthtext"

如果您知道文件类型是什么,您可以通过指定要搜索的文件类型扩展名来缩小搜索范围,在本例中为.pasOR.dfm文件:

find . -type f \( -name "*.pas" -o -name "*.dfm" \) -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searchtext"

选项的简短说明:

  1. .find当前目录中指定。
  2. -name" *.*" : 对于所有文件 ( -name " *.pas" -o -name " *.dfm" ) : 仅*.pasOR*.dfm文件,或指定为-o
  3. -type f指定您正在查找文件
  4. -print0并且--null|(pipe) 的另一侧是关键的,将文件名从 传递findgrep嵌入的 中xargs,允许在文件名中传递带有空格的文件名,允许 grep 将路径和文件名视为一个字符串,而不是在每个空间上分解它。
于 2015-01-28T06:42:34.423 回答
18

一个简单的find可以得心应手。~/.bashrc在你的文件中给它起别名:

alias ffind find / -type f | xargs grep

启动一个新终端并发出:

ffind 'text-to-find-here'
于 2017-03-22T12:30:33.720 回答
18

grep是您实现这一目标的好朋友。

grep -r <text_fo_find> <directory>

如果您不关心要查找的文本的大小写,请使用:

grep -ir <text_to_find> <directory>
于 2017-10-24T03:07:22.253 回答
17

我写了一个Python 脚本,它做了类似的事情。这就是人们应该如何使用这个脚本。

./sniff.py path pattern_to_search [file_pattern]

第一个参数path是我们将在其中递归搜索的目录。第二个参数pattern_to_search是我们要在文件中搜索的正则表达式。我们使用Python re库中定义的正则表达式格式。在此脚本中,.也匹配换行符。

第三个参数file_pattern, 是可选的。这是另一个适用于文件名的正则表达式。只有那些匹配这个正则表达式的文件才会被考虑。

例如,如果我想搜索扩展名py包含Pool(后跟 word的 Python 文件Adaptor,我执行以下操作,

./sniff.py . "Pool(.*?Adaptor"  .*py
./Demos/snippets/cubeMeshSigNeur.py:146 
./Demos/snippets/testSigNeur.py:259 
./python/moose/multiscale/core/mumbl.py:206 
./Demos/snippets/multiComptSigNeur.py:268 

瞧,它会生成匹配文件的路径和找到匹配项的行号。如果找到多个匹配项,则每个行号都将附加到文件名中。

于 2014-01-06T12:56:26.607 回答
17

尝试:

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

它将搜索所有文件系统,因为/是根文件夹。

对于主文件夹使用:

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

对于当前文件夹使用:

find ./ -type f -exec grep -H 'text-to-find-here' {} \;
于 2015-05-04T19:11:34.203 回答
17

有一个ack工具可以完全满足您的需求。

http://linux.die.net/man/1/ack

ack -i search_string folder_path/*

您可以忽略-i区分大小写的搜索

于 2016-08-17T03:31:16.057 回答
17
grep "text-to-find-here" file_name

或者

grep "text-to-find-here" directory_path/*

如果要搜索当前目录:

grep "text-to-find-here" *
于 2021-06-07T08:28:44.390 回答
16

采用:

grep -c Your_Pattern *

这将报告当前目录中的每个文件中有多少个模式副本。

于 2017-01-07T07:59:30.083 回答
15

要搜索字符串并仅使用搜索字符串输出该行:

for i in $(find /path/of/target/directory -type f); do grep -i "the string to look for" "$i"; done

例如:

for i in $(find /usr/share/applications -type f); \
do grep -i "web browser" "$i"; done

要显示包含搜索字符串的文件名:

for i in $(find /path/of/target/directory -type f); do if grep -i "the string to look for" "$i" > /dev/null; then echo "$i"; fi; done;

例如:

for i in $(find /usr/share/applications -type f); \
do if grep -i "web browser" "$i" > /dev/null; then echo "$i"; \
fi; done;
于 2014-01-25T11:08:41.107 回答
15

以下命令适用于这种方法:

find ./ -name "file_pattern_name"  -exec grep -r "pattern" {} \;
于 2015-12-12T06:14:29.650 回答
15

以前的所有答案都建议使用 grep 和 find。但还有另一种方法:使用午夜指挥官

它是一个免费的实用程序(已有 30 年历史,已被时间证明),它是可视的,而不是 GUI。它有很多功能,查找文件只是其中之一。

于 2017-06-22T16:27:25.653 回答
14

您可以使用以下命令,因为您不需要文件名,但您想从所有文件中搜索。这是我正在捕获“TEXT”表单所有日志文件,确保未打印文件名

grep -e TEXT *.log | cut -d' ' --complement -s -f1

与其他选项相比,带有 -e 选项的 grep 非常快,因为它用于 PATTERN 匹配

于 2015-06-26T11:31:45.423 回答
12

试试这个:

find . | xargs grep 'word' -sl
于 2014-12-15T10:10:06.013 回答
12

避免麻烦并安装 ack-grep。它消除了许多许可和报价问题。

apt-get install ack-grep

然后进入你要搜索的目录,运行下面的命令

cd /
ack-grep "find my keyword"
于 2016-03-23T03:41:43.923 回答
12

我尝试了grep下面的命令。它有助于在我的存储库中搜索内容/etc/yum.repos.d

grep -Ril -e 'texttoSearch' /etc/yum.repos.d
于 2019-12-27T07:27:36.510 回答
11

试试这个:

find / -type f -name "*" -exec grep -il "String_to_search" {} \;

或者

for i in /*;do grep -Ril "String_to_search" $i;done 2> /dev/null
于 2016-10-06T17:20:24.903 回答
10

采用:

grep -Erni + "text you wanna search"

该命令将在当前目录的所有文件和目录中递归搜索并打印结果。

注意:如果您的 grep 输出没有着色,您可以使用 shell 源文件中的 grep='grep --color=always' 别名来更改它。

于 2016-09-23T13:37:47.050 回答
10

findxarg当有许多潜在的匹配项需要筛选时,最好使用 with s。它比其他选项运行得更慢,但它总是有效。正如一些人发现的xargs那样,默认情况下不处理带有嵌入空格的文件。-d您可以通过指定选项来克服这个问题。

这是@RobEarl 的答案,经过增强,可以处理带空格的文件:

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

这是@venkat 的答案,同样得到了增强:

find . -name "*.txt" | xargs -d '\n' grep -i "text_pattern"

这是@Gert van Biljon 的答案,同样得到了增强:

find . -type f -name "*.*" -print0 | xargs -d '\n' --null grep --with-filename --line-number --no-messages --color --ignore-case "searthtext"

这是@LetalProgrammer 的答案,同样得到了增强:

alias ffind find / -type f | xargs -d '\n' grep

这是@Tayab Hussain 的回答,同样得到了增强:

find . | xargs -d '\n' grep 'word' -sl
于 2017-12-21T18:23:10.633 回答
10

如果您在 Git 存储库中,则可以使用:

git grep something
于 2021-02-22T00:14:52.173 回答
9

如果您有一组您将始终检查的文件,您可以为它们的路径设置别名,例如:

alias fd='find . -type f -regex ".*\.\(inc\|info\|module\|php\|test\|install\|uninstall\)"'

然后您可以像这样简单地过滤列表:

grep -U -l $'\015' $(fd)

它将列表 fd 过滤到包含 CR 模式的文件中。

我发现对我感兴趣的文件进行别名可以帮助我创建更简单的脚本,然后总是试图记住如何获取所有这些文件。递归的东西也有效,但迟早你将不得不与淘汰特定的文件类型作斗争。这就是为什么我一开始就找到所有我感兴趣的文件类型。

于 2015-01-23T18:38:01.550 回答
9

您可以使用以下命令从文件中查找特定文本:

cat file | grep 'abc' | cut -d':' -f2
于 2017-03-17T08:05:15.423 回答
8

试试这个

find . -type f -name some_file_name.xml -exec grep -H PUT_YOUR_STRING_HERE {} \;
于 2015-11-18T16:04:51.003 回答
8

正如彼得在上一个答案中提到的那样,所有以前的答案都建议使用 grep 和 find。

但自 2001 年以来,有一种更复杂的方式使用Gnome Commander和完美的GUI和大量选项,查找文件只是其中之一。它也是一个免费的实用程序,经过时间证明。

于 2017-07-10T17:31:08.873 回答
8

另请参阅The Platinium Searcher,它类似于The Silver Searcher,它是用 Go 编写的。

例子:

pt -e 'text to search'
于 2018-04-17T02:55:05.017 回答
7

GUI 搜索替代方案 - 桌面使用:

- 因为问题不是精确地要求命令

Searchmonkey:高级文件搜索工具,无需使用正则表达式为您的系统建立索引。图形等效于 find/grep。适用于 Linux (Gnome/KDE/Java) 和 Windows (Java) - 开源 GPL v3

特征:

  • 高级正则表达式
  • 结果显示在上下文中
  • 搜索包含文本
  • 面板显示包含文本的行
  • 2018 年新更新
  • 等等

下载 - 链接:

.

截屏:

在此处输入图像描述

于 2018-03-25T01:31:08.920 回答
7

我正在尝试找到一种方法来扫描我的整个 Linux 系统以查找包含特定文本字符串的所有文件。...这接近正确的方法吗?如果没有,我该怎么办?...这种在文件中查找文本字符串的能力对于我正在做的一些编程项目非常有用。

虽然您不应该用不同的程序替换(或别名)系统命令,但由于存在神秘破坏脚本或其他实用程序的风险,如果您手动或从您自己的脚本或程序运行文本搜索,您应该考虑最快的合适的多次搜索大量文件时的程序。在对您描述的用例进行几次使用后,您可以恢复安装和熟悉更好的实用程序所花费的十分钟到半小时的时间。

提供“ ack、ag、git-grep、GNU grep 和 ripgrep的功能比较”的网页可以帮助您决定哪个程序提供您需要的功能。

  • Andrew Gallant 的博客声称:“ ripgrep 比 {grep, ag, git grep, ucg, pt, sift} 更快”(其他一些人共享的声明,这就是为什么功能比较很有帮助)。特别感兴趣的是他关于正则表达式实现和陷阱的部分。

    以下命令搜索所有文件,包括隐藏文件和可执行文件:

    $ rg -uuu foobar

  • Silver Searcher (ag) 声称它比 Ack 快 5-10 倍。在其他一些答案中建议使用此程序。GitHub 不像 ripgrep 那样新近出现,而且明显有更多的提交和分支,但发布的版本更少,很难根据这些统计数据得出绝对的声明。简短版本: ripgrep更快,但学习曲线很小,不会被差异所吸引。

  • 那么接下来会是什么,你猜对了,白金搜索者。声称是:它搜索代码的速度比 ack 快大约 3-5 倍,但它的速度与银牌搜索器相当。它是用 GoLang 编写的,可以搜索 UTF-8、EUC-JP 和 Shift_JIS 文件;如果这更有趣。GitHub 既不是最近也不是特别活跃。GoLang 本身有一个快速而强大的正则表达式,但如果它有更好的用户兴趣,那么白金搜索器会被更好地推荐。

对于速度和功能强大的索引查询语言(例如ElasticSearchSolr )的组合,可能是一项有回报的长期投资,但如果您想要快速简单地替代 grep,则不是。OTOH 都有一个 API,可以从您编写的任何程序中调用,从而为您的程序添加强大的搜索功能。

虽然可以生成外部程序、执行搜索、拦截其输出并对其进行处理,但调用 API 是提高功率和性能的方法。

This question was protected Aug 6 '15 at 19:34 with this caution:
  我们正在寻找提供一些解释和背景的长答案。不要只给出一条线的答案;解释为什么你的答案是正确的,最好是引用。

虽然一些答案提出了完成搜索的替代方法,但除了“免费”、“更快”、“更复杂”、“大量功能”等之外,他们没有解释为什么。不要试图出售它,只是告诉我们“为什么你的答案是正确的”。我试图教如何选择最适合用户的东西,以及为什么. 这就是为什么我在已经有这么多的时候提供另一个答案的原因。否则,我同意已经有很多答案了;我希望我带来了很多新东西。

于 2019-09-18T06:03:06.657 回答
7

我的用例是找到我以前写过的 Python 代码,它以特定的方式编写了 jsonlines。我知道这jsonl将是函数名称的一部分,并且to_json会出现在正文中,但仅此而已。

尽管有 50 个答案,但在同一文件中找到多个字符串(无论是否在同一行中)仍未得到解答。

in grep 是为了-q安静。什么都不打印,只设置返回值。因此-print在最后。每个-exec仅在前一个成功的情况下运行。因此,如果您有很多文件,考虑消除您不感兴趣的文件的模式是值得的。

find . -type f -name "*.py" \
  -exec grep -q -e 'to_json' {} \; \
  -exec grep -q -e 'def\s.*jsonl' {} \; \
  -print
于 2021-03-30T12:19:16.257 回答
5

您可以使用ripgrep它将尊重默认项目的.gitignore文件。

ripgrep

要抑制Permission denied错误:

rg -i rustacean 2> /dev/null

这会将标准错误(stderr)输出重定向到/dev/null.

于 2020-05-27T18:54:13.040 回答
4

你的命令是正确的。您只需要添加-l到 grep:

find / -type f -exec grep -l 'text-to-find-here' {} \;
于 2019-06-07T09:08:16.470 回答
3

试试这个命令。这将为您提供包含您输入的模式的文件。

sudo grep -inr "your-pattern" /

这里: i - 忽略大小写区别,以便仅大小写不同的字符相互匹配。

n - 确保实际行内容的第一个字符位于制表位上,以便制表符的对齐方式看起来正常。

r - 递归地读取每个目录下的所有文件,仅当它们在命令行上时才遵循符号链接。请注意,如果没有给出文件操作数,grep 会搜索工作目录。

于 2020-05-26T17:46:38.010 回答
3

请根据需求自定义以下命令,并从文件中递归查找任何字符串。

grep -i hack $(find /etc/ -type f)
于 2020-08-09T07:33:09.923 回答
2

您还可以使用awk

awk '/^(pattern)/{print}' /path/to/find/*

pattern是您要在文件中匹配的字符串。

于 2019-10-04T20:56:31.370 回答
-2

查找任何名称为“ .kube/config”的文件,内容包括eks_use1d

locate ".kube/config" | xargs -i sh -c 'echo \\n{};cat {} | grep eks_use1d'
于 2019-12-24T08:47:00.060 回答