Nat*_*han 4914 linux directory grep text find
我正在尝试找到一种方法来扫描整个Linux系统,查找包含特定文本字符串的所有文件.只是为了澄清,我在文件中寻找文本,而不是文件名.
当我查找如何做到这一点时,我遇到了两次这个解决方案:
find / -type f -exec grep -H 'text-to-find-here' {} \;
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用.它似乎显示系统中的每个文件.
这是否接近正确的方法呢?如果没有,我该怎么办?这种在文件中查找文本字符串的能力对于我正在做的一些编程项目非常有用.
rak*_*ib_ 8841
请执行下列操作:
grep -rnw '/path/to/somewhere/' -e 'pattern'
Run Code Online (Sandbox Code Playgroud)
-r
或者-R
是递归的,-n
是行号,和 -w
代表整个单词的匹配. -l
(小写L)可以添加到只给出匹配文件的文件名.除了这些,--exclude
,--include
,--exclude-dir
标志可用于高效搜索:
这只会搜索那些具有.c或.h扩展名的文件:
grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
Run Code Online (Sandbox Code Playgroud)这将排除搜索所有以.o扩展名结尾的文件:
grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
Run Code Online (Sandbox Code Playgroud)对于目录,可以通过--exclude-dir
参数排除特定目录.例如,这将排除目录dir1 /,dir2 /以及所有匹配*.dst /:
grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
Run Code Online (Sandbox Code Playgroud)这对我来说非常有效,可以达到和你一样的目的.
有关更多选项检查man grep
.
fed*_*qui 1399
你可以使用grep -ilR
:
grep -Ril "text-to-find-here" /
Run Code Online (Sandbox Code Playgroud)
i
代表忽略大小写(在您的情况下是可选的). R
代表递归. l
代表"显示文件名,而不是结果本身"./
代表从机器的根开始.Ste*_*han 308
你可以使用ack.它就像grep的源代码.您可以使用它扫描整个文件系统.
做就是了:
ack 'text-to-find-here'
Run Code Online (Sandbox Code Playgroud)
在根目录中.
您还可以使用正则表达式,指定文件类型等.
UPDATE
我刚刚发现了The Silver Searcher,它类似于ack但比它快3-5倍,甚至忽略了.gitignore
文件中的模式.
lea*_*_19 177
您可以使用:
grep -r "string to be searched" /path/to/dir
Run Code Online (Sandbox Code Playgroud)
该r
代表递归等都将在路径搜索指定的也是它的子目录.这将告诉您文件名以及打印出字符串出现的文件中的行.
或者类似于您正在尝试的命令(例如:)用于搜索所有javascript文件(*.js):
find . -name '*.js' -exec grep -i 'string to search for' {} \; -print
Run Code Online (Sandbox Code Playgroud)
这将打印出现文本的文件中的行,但不会打印文件名.
除了这个命令,我们也可以写这个: grep -rn"要搜索的字符串"/ path /到/ directory /或/ file -r:递归搜索 n:将显示匹配的行号
A R*_*A R 109
你可以用这个:
grep -inr "Text" folder/to/be/searched/
Run Code Online (Sandbox Code Playgroud)
sha*_*ora 79
当您在 Linux 上搜索特定文本时,此 grep 命令将为您提供精确的结果 -
grep -inRsH "Text to be searched" /path/to/dir (it can be '.')
i
代表忽略大小写区别
R
代表递归,它还包括符号链接。最好使用“R”而不是“r”
n
代表“它将打印行号”。
s
代表“抑制错误消息”
H
代表“它将打印每个匹配的文件名”
lka*_*mal 67
首先,我相信你用的是-H
代替-l
.您也可以尝试在引号后面添加文本{} \
.
find / -type f -exec grep -l "text-to-find-here" {} \;
Run Code Online (Sandbox Code Playgroud)
假设您正在搜索目录中包含特定文本"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$
Run Code Online (Sandbox Code Playgroud)
即使您不使用"text"与"TEXT"之类的情况,也可以使用-i
开关忽略大小写.你可以阅读更多细节在这里.
希望这对你有所帮助.
ken*_*orb 61
grep
(GNU或BSD)您可以使用grep
工具递归搜索当前文件夹,例如:
grep -r "class foo" .
Run Code Online (Sandbox Code Playgroud)
注意:-r
- 递归搜索子目录.
您还可以使用通配语法在特定文件中进行搜索,例如:
grep "class foo" **/*.c
Run Code Online (Sandbox Code Playgroud)
注意:通过使用globbing选项(**
),它以递归方式扫描具有特定扩展名或模式的所有文件.要启用此语法,请运行:shopt -s globstar
.您还可以使用**/*.*
所有文件(隐藏和不扩展)或任何其他模式.
如果您的错误是您的参数太长,请考虑缩小搜索范围,或使用find
语法,例如:
find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'
Run Code Online (Sandbox Code Playgroud)
或者使用ripgrep
.
ripgrep
如果你正在处理更大的项目或大文件,你应该使用ripgrep
,比如:
rg "class foo" .
Run Code Online (Sandbox Code Playgroud)
查看GitHub项目页面上的文档,安装步骤或源代码.
它比其他工具一样快多了GNU/BSD grep
,ucg
,ag
,sift
,ack
,pt
或类似的,因为它是建立在之上锈病的正则表达式引擎,它使用有限自动机,SIMD和积极文字的优化,使搜索速度非常快.
它支持忽略.gitignore
文件中指定的模式,因此可以同时针对多个glob模式匹配单个文件路径.
您可以使用常用参数,例如:
-i
- 不敏感的搜索.-I
- 忽略二进制文件.-w
- 搜索整个单词(与部分单词匹配相反).-n
- 显示你的比赛线.-C
/ --context
(例如-C5
) - 增加上下文,以便查看周围的代码.--color=auto
- 标记匹配的文本.-H
- 显示找到文本的文件名.-c
- 显示匹配行的计数.可以结合使用-H
.Rob*_*arl 54
如果您grep
不支持递归搜索,则可以结合find
使用xargs
:
find / -type f | xargs grep 'text-to-find-here'
Run Code Online (Sandbox Code Playgroud)
我发现这比格式更容易记住find -exec
.
这将输出文件名和匹配行的内容,例如
/home/rob/file:text-to-find-here
Run Code Online (Sandbox Code Playgroud)
您可能要添加的可选标志grep
:
-i
- 不区分大小写的搜索-l
- 仅输出找到匹配项的文件名-h
- 只输出匹配的行(不是文件名)enf*_*net 42
grep -insr "pattern" *
Run Code Online (Sandbox Code Playgroud)
i
:忽略PATTERN和输入文件中的大小写区别.n
:在输入文件中使用基于1的行号为每行输出添加前缀.s
:禁止有关不存在或不可读文件的错误消息.r
:递归地读取每个目录下的所有文件.Eyn*_*ave 37
grep -lrnw '/root/Desktop/ipozal' -e 'geolocation'
Run Code Online (Sandbox Code Playgroud)
例如:
Blu*_*zee 34
如何在Linux上找到包含特定文本的所有文件?(......)
我两次遇到这个解决方案:
find / -type f -exec grep -H 'text-to-find-here' {} \;
如果在您的示例中使用find,则更好地添加-s
(--no-messages
)grep
以及2>/dev/null
在命令的末尾,以避免由和发出的大量Permission denied消息:grep
find
find / -type f -exec grep -sH 'text-to-find-here' {} \; 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
find是在类Unix平台上搜索文件的标准工具 - 在查找特定文本时与grep结合使用.在查找命令经常联合 xargs的,顺便说一句.
为同一目的存在更快更容易的工具 - 见下文.如果它们在您的平台上可用,请更好地尝试它们,当然:
RipGrep - 最快的搜索工具:
rg 'text-to-find-here' / -l
Run Code Online (Sandbox Code Playgroud)
ag 'text-to-find-here' / -l
Run Code Online (Sandbox Code Playgroud)
确认:
ack 'text-to-find-here' / -l
Run Code Online (Sandbox Code Playgroud)
注意:您也可以添加2>/dev/null
这些命令,以隐藏许多错误消息.
警告:除非你真的无法避免它,否则不要在'/'(根目录)中搜索以避免长时间和低效的搜索!因此,在上面的示例中,您最好用子目录名替换' / ',例如"/ home"取决于您实际想要搜索的位置...
Nei*_*wal 34
有一个名为The Silversearcher的新工具
sudo apt install silversearcher-ag
Run Code Online (Sandbox Code Playgroud)
它与Git和其他VCS密切合作.所以你不会在.git或其他目录中获得任何东西.
你可以简单地使用
ag "Search query"
Run Code Online (Sandbox Code Playgroud)
它会为你完成任务!
小智 29
尝试:
find . -name "*.txt" | xargs grep -i "text_pattern"
Run Code Online (Sandbox Code Playgroud)
mah*_*ich 29
用于pwd
从您所在的任何目录中搜索,向下递归
grep -rnw `pwd` -e "pattern"
Run Code Online (Sandbox Code Playgroud)
更新
根据您使用的grep版本,您可以省略pwd
..
如果没有给出目录,那么在较新版本上似乎是grep的默认情况:
grep -rnw -e "pattern"
要么
grep -rnw "pattern"
会做同上面的事情!
Ale*_*min 19
grep
即使我们不寻找字符串也可以使用.
只需跑步,
grep -RIl "" .
Run Code Online (Sandbox Code Playgroud)
将打印出所有文本文件的路径,即仅包含可打印字符的文件.
Atu*_*ind 17
以下是可用于搜索文件的几个命令列表.
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
Run Code Online (Sandbox Code Playgroud)
AAA*_*lub 16
Silver Searcher是一个了不起的工具,但ripgrep可能会更好.
它可以在Linux,Mac和Windows上运行,并且在几个月前写在Hacker News上(这有一个链接到Andrew Gallant的Blog,它有一个GitHub链接):
muh*_*yab 16
我尝试了grep
下面的命令。它有助于在我的存储库中搜索内容(位于 )/etc/yum.repos.d
。
grep -Ril -e 'texttoSearch' /etc/yum.repos.d
Run Code Online (Sandbox Code Playgroud)
Vin*_*shi 15
find /path -type f -exec grep -l "string" {} \;
Run Code Online (Sandbox Code Playgroud)
评论解释
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
Run Code Online (Sandbox Code Playgroud)
小智 15
希望这有助于......
扩展grep
一点以在输出中提供更多信息,例如,获取文本所在文件中的行号可以按如下方式完成:
find . -type f -name "*.*" -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searthtext"
Run Code Online (Sandbox Code Playgroud)
如果你知道文件类型是什么,你可以通过指定要搜索的文件类型扩展来缩小搜索范围,在这种情况下是.pas
OR .dfm
文件:
find . -type f \( -name "*.pas" -o -name "*.dfm" \) -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searchtext"
Run Code Online (Sandbox Code Playgroud)
选项的简短说明:
.
在find
当前目录的指定中.-name
" *.*
":对于所有文件(-name" *.pas
" - o -name" *.dfm
"):仅指定*.pas
OR *.dfm
文件或OR-o
-type f
指定您正在查找文件-print0
并且--null
在|
(管道)的另一端是关键的,将文件名从嵌入传递find
到grep
嵌入式xargs
,允许在文件名中传递带有空格的文件名,允许grep将路径和文件名视为一个字符串,而不是在每个空间分手.小智 15
尝试:
find / -type f -exec grep -H 'text-to-find-here' {} \;
Run Code Online (Sandbox Code Playgroud)
这将搜索所有文件系统,因为/
是根文件夹.
对于主文件夹使用:
find ~/ -type f -exec grep -H 'text-to-find-here' {} \;
Run Code Online (Sandbox Code Playgroud)
对于当前文件夹使用:
find ./ -type f -exec grep -H 'text-to-find-here' {} \;
Run Code Online (Sandbox Code Playgroud)
dan*_*ter 15
一个简单的find
工作方便.在您的~/.bashrc
文件中将其别名:
alias ffind find / -type f | xargs grep
Run Code Online (Sandbox Code Playgroud)
启动新终端并发出:
ffind 'text-to-find-here'
Run Code Online (Sandbox Code Playgroud)
Dil*_*war 14
我写了一个Python脚本,它做了类似的事情.这就是人们应该如何使用这个脚本.
./sniff.py path pattern_to_search [file_pattern]
Run Code Online (Sandbox Code Playgroud)
第一个参数path
是我们将递归搜索的目录.第二个参数pattern_to_search
是我们想要在文件中搜索的正则表达式.我们使用Python re
库中定义的正则表达式格式.在此脚本中,.
还匹配换行符.
第三个参数file_pattern
是可选的.这是另一个适用于文件名的正则表达式.仅考虑与此正则表达式匹配的那些文件.
例如,如果我想搜索py
包含Pool(
后跟单词的扩展名的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
Run Code Online (Sandbox Code Playgroud)
瞧,它会生成匹配文件的路径和找到匹配项的行号.如果找到多个匹配项,则每个行号将附加到文件名.
Dr_*_*ope 13
使用:
grep -c Your_Pattern *
Run Code Online (Sandbox Code Playgroud)
这将报告当前目录中每个文件中有多少个模式副本.
小智 13
grep是你实现这一目标的好朋友.
grep -r <text_fo_find> <directory>
Run Code Online (Sandbox Code Playgroud)
如果你不关心文本的情况下找到然后使用
grep -ir <text_to_find> <directory>
Run Code Online (Sandbox Code Playgroud)
小智 12
要搜索字符串并使用搜索字符串输出该行:
for i in $(find /path/of/target/directory -type f); do grep -i "the string to look for" "$i"; done
Run Code Online (Sandbox Code Playgroud)
例如:
for i in $(find /usr/share/applications -type f); \
do grep -i "web browser" "$i"; done
Run Code Online (Sandbox Code Playgroud)
要显示包含搜索字符串的文件名:
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;
Run Code Online (Sandbox Code Playgroud)
例如:
for i in $(find /usr/share/applications -type f); \
do if grep -i "web browser" "$i" > /dev/null; then echo "$i"; \
fi; done;
Run Code Online (Sandbox Code Playgroud)
Pal*_*Pal 12
有一种ack
工具可以完全满足您的需求.
http://linux.die.net/man/1/ack
ack -i search_string folder_path/*
Run Code Online (Sandbox Code Playgroud)
您可以忽略-i
区分大小写的搜索
nit*_*708 12
我很着迷于grep用'rl'做出的简单方法
grep -rl 'pattern_to_find' /path/where/to/find
-r to find recursively file / directory inside directories..
-l to list files matching the 'pattern'
Run Code Online (Sandbox Code Playgroud)
使用'-r'而不是'l'来查看文件名后面跟着找到模式的文本!
grep -r 'pattern_to_find' /path/where/to/find
Run Code Online (Sandbox Code Playgroud)
工作得很完美..
希望能帮助到你!
Bre*_*dSP 12
如果您严格要使用find
那么:
find + grep
find /path/to/somewhere/ -type f -exec grep -nw 'textPattern' {} \;
1. find
使用搜索文件,然后执行grep
所有文件.
可以在一个命令中组合如下:
find
使用-name Pattern
,如果你想grep
只有某些文件:
find /path/to/somewhere/ -type f -name \*.cpp -exec grep -nw 'textPattern' {} \;
这可以让您find
找到文件的强大功能.您可以使用它并使用不同的选项find
来改进或缩小文件搜索范围.
Tay*_*ain 11
试试这个:
find . | xargs grep 'word' -sl
Run Code Online (Sandbox Code Playgroud)
Mit*_*tel 11
您可以使用以下命令,因为您不想要文件名但想要从所有文件中搜索.这是我正在捕获"TEXT"表单所有日志文件,确保不打印文件名
grep -e TEXT *.log | cut -d' ' --complement -s -f1
Run Code Online (Sandbox Code Playgroud)
与其他选项相比,使用-e选项的grep非常快,因为它适用于PATTERN匹配
Pra*_*ami 11
以下命令适用于此方法:
find ./ -name "file_pattern_name" -exec grep -r "pattern" {} \;
Run Code Online (Sandbox Code Playgroud)
Kar*_*eem 11
避免麻烦并安装ack-grep.它消除了许多许可和报价问题.
apt-get install ack-grep
Run Code Online (Sandbox Code Playgroud)
然后转到要搜索的目录并运行以下命令
cd /
ack-grep "find my keyword"
Run Code Online (Sandbox Code Playgroud)
Leo*_*Leo 10
我的用例是找到我以前编写的以特定方式编写 jsonlines 的 Python 代码。我知道这jsonl
将是函数名称的一部分并且to_json
会出现在函数体内,但除此之外就没有什么了。
尽管有 50 个答案,但在同一文件中找到多个字符串(无论是否在同一行)尚未得到解答。
grep-q
中的 表示安静。不打印任何内容,仅设置返回值。因此-print
最后。-exec
仅当前一个成功时,每个才会运行。因此,如果您有很多文件,那么考虑消除您不感兴趣的文件的模式是值得的。
find . -type f -name "*.py" \
-exec grep -q -e 'to_json' {} \; \
-exec grep -q -e 'def\s.*jsonl' {} \; \
-print
Run Code Online (Sandbox Code Playgroud)
grep -Erni + "text you wanna search"
Run Code Online (Sandbox Code Playgroud)
该命令将在当前目录的所有文件和目录中以递归方式搜索并打印结果.
注意:如果你的grep输出没有着色,你可以在shell src文件中使用grep ='grep --color = always'别名来更改它
如果您有一组始终要检查的文件,则可以为其路径添加别名,例如:
alias fd='find . -type f -regex ".*\.\(inc\|info\|module\|php\|test\|install\|uninstall\)"'
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样过滤列表:
grep -U -l $'\015' $(fd)
Run Code Online (Sandbox Code Playgroud)
其中将列表fd筛选出包含CR模式的文件.
我发现别名我感兴趣的文件可以帮助我创建更简单的脚本,然后总是试图记住如何获取所有这些文件.递归的东西也可以工作,但迟早你将不得不面对清除特定的文件类型.这就是为什么我只是找到我感兴趣的所有文件类型的原因.
试试这个:
find / -type f -name "*" -exec grep -il "String_to_search" {} \;
Run Code Online (Sandbox Code Playgroud)
要么
for i in /*;do grep -Ril "String_to_search" $i;done 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
小智 8
您可以使用以下命令从文件中查找特定文本:
cat file | grep 'abc' | cut -d':' -f2
Run Code Online (Sandbox Code Playgroud)
正如彼得在上一篇回答中提到的那样,之前的所有答案都表明了grep并找到
但是有更复杂的方式使用Gnome Commander具有完美的GUI和自2001年以来的大量选项,找到文件只是其中之一.它是一种免费的实用工具,经过时间证明.
find
用xarg
■当存在很多潜在的去筛选匹配是优选的.它的运行速度比其他选项慢,但它始终有效.正如一些人所发现的xargs
那样,默认情况下不处理带有嵌入空格的文件.您可以通过指定-d
选项来克服此问题.
这是@ RobEarl的答案,增强了所以它处理带空格的文件:
find / -type f | xargs -d '\n' grep 'text-to-find-here'
Run Code Online (Sandbox Code Playgroud)
这是@ venkat的答案,同样增强了:
find . -name "*.txt" | xargs -d '\n' grep -i "text_pattern"
Run Code Online (Sandbox Code Playgroud)
这是@Gert van Biljon的答案,同样增强了:
find . -type f -name "*.*" -print0 | xargs -d '\n' --null grep --with-filename --line-number --no-messages --color --ignore-case "searthtext"
Run Code Online (Sandbox Code Playgroud)
这是@ LetalProgrammer的答案,同样增强了:
alias ffind find / -type f | xargs -d '\n' grep
Run Code Online (Sandbox Code Playgroud)
这是@Tayab Hussain的答案,同样增强了:
find . | xargs -d '\n' grep 'word' -sl
Run Code Online (Sandbox Code Playgroud)
小智 8
试试这个命令。这将为您提供包含您输入的模式的文件。
sudo grep -inr "your-pattern" /
Run Code Online (Sandbox Code Playgroud)
这里: i - 忽略大小写区别,以便仅大小写不同的字符相互匹配。
n - 确保实际行内容的第一个字符位于制表位上,以便制表符的对齐方式看起来正常。
r - 递归地读取每个目录下的所有文件,仅当它们位于命令行上时才遵循符号链接。请注意,如果未给出文件操作数,grep 将搜索工作目录。
试试这个
find . -type f -name some_file_name.xml -exec grep -H PUT_YOUR_STRING_HERE {} \;
Run Code Online (Sandbox Code Playgroud)
小智 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 本身有一个快速而强大的正则表达式,但如果它有更好的用户兴趣,最好推荐白金搜索器。
对于速度和强大的索引查询语言(例如ElasticSearch或Solr)的组合,可以是一项有回报的长期投资,但如果您想要快速简单地替代 grep,则不是。OTOH 都有一个可以从您编写的任何程序中调用的 API,为您的程序添加强大的搜索功能。
虽然可以生成外部程序、执行搜索、拦截其输出并对其进行处理,但调用 API 是提高功率和性能的方法。
This question was protected Aug 6 '15 at 19:34 with this caution:
我们正在寻找能够提供一些解释和背景的长篇答案。不要只给出一行答案;解释为什么你的答案是正确的,最好是引用。
虽然一些答案提出了完成搜索的替代方法,但除了“免费”、“更快”、“更复杂”、“大量功能”等之外,它们并没有解释为什么。不要试图出售它,只需告诉我们“为什么你的答案是正确的”。我试图教如何选择最适合用户的东西,以及为什么. 这就是为什么我提供另一个答案的原因,因为已经有这么多答案了。否则我会同意已经有很多答案了;我希望我带来了很多新东西。
grep "text-to-find-here" file_name
Run Code Online (Sandbox Code Playgroud)
或者
grep "text-to-find-here" directory_path/*
Run Code Online (Sandbox Code Playgroud)
如果要搜索当前目录:
grep "text-to-find-here" *
Run Code Online (Sandbox Code Playgroud)
GUI搜索备选方案-桌面使用:
-由于问题并非精确地要求命令
Searchmonkey:高级文件搜索工具,而无需使用正则表达式对系统进行索引。图形等效于find / grep。适用于Linux(Gnome / KDE / Java)和Windows(Java)-开源GPL v3
特征:
下载-链接:
。
屏幕截图:
另请参阅Platinium Searcher,它类似于The Silver Searcher,它是用Go编写的.
例:
pt -e 'text to search'
Run Code Online (Sandbox Code Playgroud)
小智 5
你的命令是正确的。你只需要-l
在 grep 中添加:
find / -type f -exec grep -l 'text-to-find-here' {} \;
Run Code Online (Sandbox Code Playgroud)
您可以使用ripgrep它将默认尊重项目的.gitignore
文件
抑制Permission denied
错误
rg -i rustacean 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
这会将stderr
(标准错误输出)重定向到/dev/null
小智 5
请根据需求自定义以下命令,并从文件中递归查找任意字符串。
grep -i hack $(find /etc/ -type f)
Run Code Online (Sandbox Code Playgroud)