Linux grep 文本查找

grep 是 Linux 下最常用的文本搜索命令,经常结合管道符 | 使用——即在前面命令的执行结果中查找包含指定字符串的内容。

基础用法:结合管道过滤

ps -ef 列出进程很多,用 grep 过滤出 redis 相关进程:

$ ps -ef | grep redis
root     10748 10733  0 21:14 pts/21   00:00:00 redis-server *:6379
root     10754 10733  0 21:14 pts/21   00:00:00 grep --color=auto redis

排除包含 auto 的结果,用 -v:

$ ps -ef | grep redis | grep -v auto
root     10748 10733  0 21:14 pts/21   00:00:00 redis-server *:6379

统计结果数量,用 -c:

$ ps -ef | grep redis -c
2

在指定文件中查找关键字

$ grep "test" aaa/bbb/linux_command_debug.md
int test(int a,int b)
    test(a,b);

显示行号,用 -n:

$ grep -n "test" aaa/bbb/linux_command_debug.md
18:int test(int a,int b)
27:    test(a,b);

指定或排除文件

搜索所有 .md 文件:

$ grep -n "test" *.md

排除 .txt 文件:

$ grep -rn "test" --exclude=*.txt

排除条件较多时,写入文件 skip.txt:

*.txt
test.md
$ grep -rn "test" --exclude-from=skip.txt

排除指定目录,用 --exclude-dir:

$ grep -rn "test" --exclude-dir=aaa

查找包含指定关键字的文件

在当前目录下递归查找包含 int main(void) 的文件:

$ grep -rn "int main(void)"
aaa/bbb/c_main_func.md:49:int main(void)
aaa/bbb/c_array.md:104:int main(void)

只显示文件名,用 -l:

$ grep -rln "int main(void)"
aaa/bbb/c_main_func.md
aaa/bbb/c_array.md
aaa/bbb/pc-lint.md

查找不包含指定关键字的文件,用 -L:

$ grep -rLn "int main(void)"

注意:不带 -r 参数时 grep 会暂停等待控制台输入,使用时要记得带上相关参数。

忽略大小写

用 -i(--ignore-case):

$ grep -rni "int MAIN(void)"
aaa/bbb/c_main_func.md:49:int main(void)

显示不包含关键字的行

用 -v:

$ grep -rnv "int main(void)"

显示关键字前后内容

用 -A(after)和 -B(before)显示前后 N 行,日志分析时非常有用:

$ grep -rn "int main(void)" -A 1 -B 1
aaa/bbb/c_array.md-103-}
aaa/bbb/c_array.md:104:int main(void)
aaa/bbb/c_array.md-105-{

指定规则文件搜索

多个关键字写入 key.txt:

int main(void)
test
$ cat filename | grep -f key.txt

正则表达式搜索

grep 支持正则,例如查找以 t 开头、以 t 结尾的行:

$ grep -rn ^t.*t$
key.txt:2:test

其中 ^t 表示以 t 开头,t$ 表示以 t 结尾。需要扩展正则可用 egrep。

常用参数速查

参数 作用
-v 显示不包含匹配关键字的行
-l 显示包含匹配关键字的文件
-L 显示不包含匹配关键字的文件
-r 递归搜索
-i 忽略大小写
-n 显示关键字所在行号
-A n 显示关键字后 n 行
-B n 显示关键字前 n 行
-c 统计匹配数量
--exclude 排除某些文件
--exclude-dir 排除某些目录
-f 指定规则文件

   转载规则


《Linux grep 文本查找》 由 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Linux dd 命令 Linux dd 命令
dd 命令用于复制文件并对原文件的内容进行转换和格式化处理。 语法格式dd [OPTIONS]... 选项说明 选项 含义 if=文件名 指定源文件 of=文件名 指定目的文件 ibs=bytes 指定读入块大小为 byt
2018-09-20
下一篇 
Linux 查找大文件 Linux 查找大文件
在 Windows 中可以用 TreeSize 查找大文件或文件夹,Linux 下也可以。本文整理 Linux 中查找大文件/大目录的方法。 查找大文件有时你需要了解系统里有哪些大文件(如超过 100M 或 1G,阈值视情况而定)。例如搜索
2018-08-23
  目录