banner
约 900 字
3 分钟

grep 文本搜索教程:查日志、搜代码必备神器

摘要

grep 是 Linux/macOS 上最常用的文本搜索工具。本教程依据 GNU grep 官方手册,详细介绍基本用法、常用参数(-r -i -n -v -C 等)、正则表达式搜索,以及查日志、搜代码、管道组合等实用技巧。

grep 文本搜索教程

grep(Global Regular Expression Print)是 Linux/macOS 上最常用的文本搜索工具,也是命令行组合技的核心一环。无论是查日志、找代码、过滤输出,grep 都是最快的那把刀。

本教程依据 GNU grep 官方手册整理。

一、基本用法

bash
grep "关键词" 文件名

比如在日志里找包含 error 的行:

bash
grep "error" app.log

grep 最强大的地方在于可以配合管道过滤任何命令的输出

bash
ps aux | grep nginx
ls -la | grep ".conf"
history | grep "ssh"

二、最常用的参数

参数

含义

-i

忽略大小写

-r / -R

递归搜索目录下所有文件

-n

显示行号

-v

反向匹配,显示不含关键词的行

-c

只统计匹配行数

-w

全词匹配,避免 "err" 匹配到 "error"

-A 3

同时显示匹配行之后 3 行(After)

-B 3

同时显示匹配行之前 3 行(Before)

-C 3

前后各 3 行(Context),查日志最实用

-l

只列出包含关键词的文件名

-E

使用扩展正则表达式(等价于 egrep)

--color=auto

高亮匹配内容(多数发行版默认已开)

三、递归搜索代码目录

在项目里找某个函数在哪定义,-rn 是标配:

bash
grep -rn "handleRequest" src/

配合 --include 只搜指定类型的文件:

bash
grep -rn "TODO" --include="*.py" .

四、正则表达式

-E 后可以使用扩展正则:

bash
grep -E "^192\.168" access.log       # 以 192.168 开头的行
grep -E "error|fail|warn" app.log    # 多个关键词任一匹配
grep -E "^$" file.txt                # 匹配空行
grep -c -v "^$" file.txt             # 统计非空行数

常用符号:^ 行首、`# grep 文本搜索教程

grep(Global Regular Expression Print)是 Linux/macOS 上最常用的文本搜索工具,也是命令行组合技的核心一环。无论是查日志、找代码、过滤输出,grep 都是最快的那把刀。

本教程依据 GNU grep 官方手册整理。

一、基本用法

bash
grep "关键词" 文件名

比如在日志里找包含 error 的行:

bash
grep "error" app.log

grep 最强大的地方在于可以配合管道过滤任何命令的输出

bash
ps aux | grep nginx
ls -la | grep ".conf"
history | grep "ssh"

二、最常用的参数

参数

含义

-i

忽略大小写

-r / -R

递归搜索目录下所有文件

-n

显示行号

-v

反向匹配,显示不含关键词的行

-c

只统计匹配行数

-w

全词匹配,避免 "err" 匹配到 "error"

-A 3

同时显示匹配行之后 3 行(After)

-B 3

同时显示匹配行之前 3 行(Before)

-C 3

前后各 3 行(Context),查日志最实用

-l

只列出包含关键词的文件名

-E

使用扩展正则表达式(等价于 egrep)

--color=auto

高亮匹配内容(多数发行版默认已开)

三、递归搜索代码目录

在项目里找某个函数在哪定义,-rn 是标配:

bash
grep -rn "handleRequest" src/

配合 --include 只搜指定类型的文件:

bash
grep -rn "TODO" --include="*.py" .

四、正则表达式

-E 后可以使用扩展正则:

bash
grep -E "^192\.168" access.log       # 以 192.168 开头的行
grep -E "error|fail|warn" app.log    # 多个关键词任一匹配
grep -E "^$" file.txt                # 匹配空行
grep -c -v "^$" file.txt             # 统计非空行数

常用符号:^ 行首、 行尾、. 任意字符、* 重复零次以上、| 或、[] 字符集合。

五、实用组合技

统计日志中错误最多的前 5 个 IP:

bash
grep "404" access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -5

排除注释和空行,只看有效配置:

bash
grep -v "^#" /etc/ssh/sshd_config | grep -v "^$"

查找当前目录下哪些文件包含某关键词:

bash
grep -rl "password" .

六、总结

场景

命令

文件内搜索

grep "词" 文件

过滤命令输出

命令 | grep "词"

递归搜代码

grep -rn "词" 目录/

忽略大小写

-i

带上下文看日志

-C 3

多关键词

grep -E "a|b" 文件

grep 与后续会讲到的 find、awk、sed 并称文本处理四剑客,配合管道使用威力翻倍。掌握上面这些参数,日常 90% 的搜索需求已经覆盖。

END