我如何在其文件内容中找到包含一个特定的文本序列的所有文件?

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

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

当前回答

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

./sniff.py path pattern_to_search [file_pattern]

第一個論點,路径,是我們將重新搜尋的目錄. 第二個論點, pattern_to_search,是一個常見的表現,我們想要在檔案中搜尋。

第三个论点, file_pattern,是可选的. 这是另一个常见的表达式,在一个文件名上工作. 只有与这个常见的表达式相匹配的文件将被考虑。

例如,如果我想搜索Python文件的扩展Py包含Pool(跟随“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 

而 voila,它产生了匹配文件的路径和线号,在那里比赛被发现,如果超过一个比赛被发现,那么每个线号将添加到文件名。

其他回答

使用 grep -ilR:

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

i 代表忽略案例(可选在您的案例中)。R 代表重复。l 代表“显示文件名,而不是结果本身”。 / 代表在您的机器的根源开始。

试试:

find . -name "*.txt" | xargs grep -i "text_pattern"

所有以前的答案都建议抓住和找到,但还有另一种方式:使用中夜指挥官

它是一个免费的工具(30年,时间证明),它是视觉的没有GUI. 它有许多功能,找到文件只是其中之一。

试试这:

find . | xargs grep 'word' -sl

希望这就是帮助......

要在输出中提供更多信息,例如,在文件中获取字符号,文本可以如下:

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

如果您有一个想法,文件类型是什么,您可以通过指定文件类型扩展来缩小您的搜索,在此情况下,.pas 或.dfm 文件:

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

以下是选项的简短解释:

在搜索中,从当前目录中指定 - 名称“**” : 所有文件( - 名称“*.pas” -o - 名称“*.dfm” ) : 只有 *.pas 或 *.dfm 文件, 或 与 -o -type f 指定, 您正在寻找文件 -print0 和 -null 是关键的, 将文件名从搜索中转移到嵌入在 xargs 的文件名, 允许通过文件名。