本文主要介绍Linux下,使用grep和silversearcher(ag)搜索指定目录下的所有文件中的文本内容,以及常用相关选项的说明介绍。

1、使用grep -rnw查找指定文本

grep -rnw '/path/to/somewhere/' -e 'pattern'

-r-R 递归遍历目录及子目录
-n 是行号
-w 代表匹配整个单词。
-l 列出文件内容符合的文件名称。“显示文件名,而不是结果本身”。
--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参数排除特定目录。例如,这将排除dirs dir1/,dir2/及其全部与*.dst/匹配的目录:

grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"

有关更多选项,请查阅man grep

2、使用grep -Ril查找指定文本

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

i 代表忽略大小写(在您的情况下为可选)。
R 代表递归。
l 代表“显示文件名,而不是结果本身”。
/ 代表从计算机的根目录开始。

3、使用silversearcher查找文本

内容极速搜索,递归搜索路径中的模式。像grep或ack,但更快,安装命令及相关说明参考下面文档。

相关文档https://github.com/ggreer/the_silver_searcher

ag [FILE-TYPE] [OPTIONS] PATTERN [PATH]

FILE-TYPE 如果忽略,ag会搜索它支持的所有文件类型(按后缀名) PATH可以是dir,也可以是filename, 如果忽略,就会搜索当前路径下的所有支持的文件

查看支持的文件类型

ag --list-file-types

常用参数

-i 忽略大小写
-l 只列出文件名
-g 文件名匹配
-r 搜索时递归子目录。默认是true。
--php 只搜索php文件
--ignore-dir 忽略目录