如何在文件夹中搜索字符串?

有没有任何实用工具可以在ASCII文件中进行字符串搜索以避免使用命令行搜索?

如何在命令行中进行搜索,例如在目录/var/x/中的所有文件中搜索字符串"test"?


15你是真的指的“不使用”命令行吗?因为最适合这个任务的工具还是grep... - alci
在命令行界面上,The Silver Searcher可能会做得更好。 - Pablo Bianchi
9个回答

我假设你的第一个问题是关于grep命令的图形界面替代方案。对此我无能为力,因为我总是觉得命令行非常有效。
至于命令行,请尝试使用:
grep "test" /var/x/*

如果你想要递归搜索(即不仅在/var/x/目录下搜索,还包括其子目录),请执行以下操作:
grep -R "test" /var/x/

为了避免对 grep 认为是二进制文件的文件进行搜索,使用 -I 选项:
grep -I "test" /var/x/

如果grep认为一个文件是二进制的(根据文件的前几个字节),它会假设它不匹配,而不是遍历整个文件。

1文件夹中包含一些非ASCII文件,它能正常工作吗? - Anwar
1嗯,grep也会尝试在二进制文件中搜索字符串,并且如果匹配成功,就会报告:二进制文件 file.jpg 匹配 - January
但这可能需要很长时间,而且是不必要的。 - Anwar
然而,在POSIX系统上,二进制文件和ASCII文件在形式上没有区别。因此,我不明白为什么对于大小相同的文本文件来说,搜索"二进制"文件应该比搜索文本文件花费更多时间。除非你完全想避免搜索二进制文件(是的,它也可能有用)。 - January
1一月,当将二进制文件读取为文本时,通常会出现极长的“行”(因为可能需要很长时间或永远不会出现代表行末的字符或字符序列)。根据文本搜索工具的实现方式,如果将每个“行”完全读入内存,然后检查是否与搜索字符串匹配(这是grep合理的编码方式,尽管我不知道Ubuntu的grep是如何编写的),这可能会导致性能问题。 - Eliah Kagan
嗯,这完全取决于你所拥有的文件。我有很多带有极长行的ASCII文件。此外,grep(Ubuntu使用标准的GNU grep)具有稍微复杂一些的算法(你可以通过apt-get source grep查看源代码),简而言之,它会将长行分块读取。 - January
1用于不区分大小写搜索的命令是"grep -i"。 - Czarek Tomczak
3在路径的最后一个斜杠后面应该有一个 *,否则在14.04中grep似乎不会执行任何工作。 - DavidScherer
@January grep有没有选项可以打印出与字符串匹配的实际行?目前我只得到Binary file myFile.pdf matches。谢谢。 - codeaviator
这个比被接受的答案更好。 - WinEunuuchs2Unix

你可以使用searchmonkey。这个工具在软件仓库中可用,所以你可以简单地使用它。
sudo apt-get install searchmonkey

另一方面,使用grep命令行搜索确实是为此而设计的...
这是来自searchmonkey的屏幕截图。

enter image description here


由于负载过重而崩溃了 :( - WiredIn
1我对SearchMonkey遇到了问题。它在某种意义上不可靠,会漏过很多出现情况。 - tony gil
如何在图形用户界面中运行“searchmonkey”?在使用命令行安装后,我宁愿不使用命令行。 - Echeban

你可以使用regexxer,这是一个用于正则表达式的强大GUI搜索/替换工具。
你可以通过以下方式进行下载:
sudo apt-get install regexxer

enter image description here


这个应用程序虽然速度超快,但我对它有以下问题:1. 它没有只读模式,所以我不会意外替换或删除任何内容。2. 它显示了文本,但无法跳转到匹配模式的特定行。(我滚动了大约2000行代码才找到我想要的内容,而且还把颜色改成了亮红色!) - Mehrad Mahmoudian

试试Recoll,我用过的最好的GUI界面。要在所有当前支持的Ubuntu版本上安装recoll,请打开终端并输入以下命令:
sudo apt install recoll

首先,需要一些时间来索引文件(您可以定义黑名单路径、扩展名或MIME类型)。

我可以确认Recoll与gnome-search-toolsearch-monkey完全是另一个世界。它使用Xapian,因此能够检查和索引Word文档(.doc和.docx)、PDF文件、邮件文件夹等。 - Avio
嗯,它可以通过deb包进行安装(sudo apt install recoll),在一些情况下,它能够胜过grep命令,比如处理使用pkzip压缩的.docx文档。 - Avio
请注意,使用recoll之前需要先构建索引。 - Yrogirg

你可以在终端中使用grep命令: grep -r string * 这个命令会在当前目录(或子目录)下的所有文件中查找所有出现的"string"。
对于隐藏文件,你可以使用: grep -r string ..

很不幸,grep在搜索Word (.doc)文件内部时表现非常糟糕,但你可以将catdoc的输出导入到grep中。虽然我不是程序员,但这个小脚本对我来说效果不错:
#!/bin/bash
export GREP_OPTIONS='--color=auto'
echo -e "\n
Welcome to scandocs. This will search .doc (NOT .docx) files in this directory for a given string. \n
Type in the text string you want to find... \n"
read response
find . -name "*.doc" | 
while read i; do catdoc "$i" | 
grep -iH --label="$i" "$response"; done

欢迎提出所有的改进和建议!

1这个问题是关于图形应用程序和纯文本文件的。我不确定grep.doc与问题有什么关系。 - Andrea Corbellini
看起来还不错,可以参考一月份关于grep的详细回答。 - aquaherd

我刚刚发布了一个简单的工具来完成这个任务。主要面向软件开发人员,它具有在同一个窗口中打开多个文件的(独特?)特点。它使用Ace编辑器(推荐!)或HTML文本区域在浏览器中呈现结果。这是一个基于Java的工具,因此可以在Windows和Linux上运行。
快来看看吧!

https://sourceforge.net/projects/queacetu.gastona.p/


根据https://askubuntu.com/a/1141367/47073,你可以使用mate-search-tool,它与被移除的gnome-search-tool是一样的东西。我在使用searchmonkey时遇到了问题,它会丢失一些结果并且运行缓慢,不推荐使用。

安装mate-search-tool的方法如下:

sudo apt install mate-utils
mate-search-tool

您可以使用< strong> Sublime Text 在文件中查找选项,从< code>查找菜单中搜索文件夹内的字符串。

安装Sublime Text 3

sudo add-apt-repository ppa:webupd8team/sublime-text-3
sudo apt-get update
sudo apt-get install sublime-text-installer

您还可以按照此问题this的方式安装SublimeUbuntu上的其他可能方法。
要在Sublime Text中从文件夹中搜索字符串,您可以按照此问题this获取更清晰的答案。