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


98

是否有任何实用程序可在ASCII文件中进行字符串搜索以避免命令行搜索?

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


15
您的意思是使用命令行吗?因为最好的工具仍然是grep ...
alci 2012年

在CLI上,Silver Searcher可能做得更好。
Pablo

Answers:


78

您可以使用searchmonkey。该工具在存储库中可用,因此您可以简单地

sudo apt-get install searchmonkey

另一方面,使用grep进行命令行搜索实际上是为了...

这是searchmonkey的屏幕截图

在此处输入图片说明


由于负载过大而坠毁:(
WiredIn

1
我在searchmonkey上遇到了问题。从某种意义上说,它会使发生的次数减少,这是
不可信的

如何从GUI运行“ searchmonkey”?使用命令行安装后,我宁愿不使用命令行
Echeban

153

我假设您的第一个问题是关于该grep命令的GUI替代方案。我不能帮您,我总是觉得命令行非常有效。

至于命令行,请尝试

grep "test" /var/x/*

如果您想进行递归搜索(即,不仅在中/var/x/,也在其子目录中),请执行

grep -R "test" /var/x/

为了避免重复grep认为是二进制文件,请使用以下-I选项:

grep -I "test" /var/x/

如果grep认为文件是二进制文件(基于文件的前几个字节),它将假定该文件不匹配,而不是遍历整个文件。


1
如果文件夹包含一些非ascii文件,它将起作用吗?
安华

1
好吧,grep还将尝试在二进制文件中搜索字符串,如果匹配则报告:Binary file file.jpg matches
1月

1
@January当二进制文件被读取为文本时,它通常具有非常长的“行”(因为可能会很长时间或永远不会出现解释为指定行末尾的字符或字符序列)。根据文本搜索实用程序的实现方式,如果将每个“行”都完全读入内存,然后检查其是否与搜索字符串匹配,则可能会导致性能问题(这是一种合理的grep编码方式,尽管我不知道Ubuntu的grep编写方式是否如此)。
伊利亚·卡根

1
不区分大小写的搜索“ grep -i”
Czarek Tomczak

3
*路径中的最后斜杠后面应该有一个,否则grep在14.04中似乎没有做任何工作
DavidScherer

20

您可以使用regexxer,它是用于正则表达式的出色GUI搜索/替换工具。

您可以通过以下方式下载:

sudo apt-get install regexxer

在此处输入图片说明


它非常快,但是我与此应用程序有关的问题是:1.它没有只读模式,因此我不会意外替换或删除任何内容。2.它显示文本,但不会移动到特定位置模式已匹配的行。(我将颜色更改为鲜红色后滚动了2000行代码,找到了我要的内容!)
Mehrad Mahmoudian

6

尝试Recoll,这是我用过的最好的GUI。要在当前所有受支持的Ubuntu版本中安装recoll,请打开终端并输入:

sudo apt install recoll

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


我可以确认Recoll相对于gnome-search-tool还是完全是另一个世界search-monkey。它使用Xapian的,所以它能够检查和索引Word文档(包括doc和docx),PDF文件,邮件文件夹,等等
阿维奥

嗯,它可以通过deb打包(sudo apt install recoll)来使用,并且即使grep失败也可以完成它的工作,例如,使用以pkzip压缩方式压缩的.docx文档。
Avio

请注意,recoll首先需要建立索引。
Yrogirg)

5

您可以grep从终端使用命令:

grep -r string *

此命令将在当前目录(或子目录)下的所有文件中查找所有出现的“字符串”。

对于隐藏文件,可以使用:

grep -r string ..


2

不幸的是,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 2013年

似乎还可以,请参见有关1月份的详细答案grep
2013年


1

根据https://askubuntu.com/a/1141367/47073

您可以使用mate-search-tool,这与gnome-search-tool删除的内容相同。我在使用searchmonkey时遇到问题,它缺少一些结果并且很慢,不建议这样做。

要安装mate-search-tool

sudo apt install mate-utils
mate-search-tool

0

您可以使用菜单中的Sublime Text Find in Files选项,从Find文件夹中搜索文件内的字符串。

安装Sublime Text 3

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

您还可以按照问题了解在Ubuntu上安装Sublime的其他可能方式。

要在Sublime Text中的文件夹中搜索所有文件中的字符串,可以遵循问题以获取更清晰的答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.