grep------文本搜索利器
1、grep 核心定位
grep(Global Regular Expression Print)是 Linux 下最常用的文本搜索工具,核心能力是 "按模式匹配文本并输出结果",支持基本 / 扩展正则表达式,是日志分析、配置文件检索、系统管理的必备工具。
2、grep 基础语法
grep [选项] "匹配模式" 目标文件/目录
3、grep 常用选项速查
| 选项 | 作用 | 示例 | |
|---|---|---|---|
| -i | 忽略大小写 | grep -i "error" app.log |
|
| -n | 显示匹配行的行号 | grep -n "warning" app.log |
|
| -v | 反向匹配(输出不匹配的行) | grep -v "debug" app.log |
|
| -w | 精确匹配整个单词(避免部分匹配) | grep -w "user" /etc/passwd |
|
| -r | 递归搜索目录下所有文件 | grep -r "TODO" ./project/ |
|
| -c | 仅统计匹配行的数量 | grep -c "404" access.log |
|
| -l | 仅显示包含匹配内容的文件名 | grep -l "mysql" ./config/*.conf |
|
| -E | 启用扩展正则表达式(等效 egrep) | `grep -E "error |
4、grep 正则表达式实战
正则是 grep 强大的核心,以下是高频正则场景:
测试文件内容:

4.1 基础正则(BRE)
常见用法:
# 1.1 行首匹配:查找以 "root" 开头的行
grep "^root" /etc/passwd
# 1.2 行尾匹配:查找以 ".log" 结尾的行(\ 转义 .)
grep "\.log$" filelist.txt
# 1.3 字符集匹配:查找包含数字 0-5 的行
grep "[0-5]" app.log
# 1.4 排除字符集:查找不包含 a/b/c 的行
grep "[^abc]" test.txt
部分结果展示:
(1)忽略大小写查找包含 "pattern" 的行

(2)反向匹配(输出不包含字母 "a" 的行)

4.2 扩展正则(ERE,需加 -E)
常见用法:
# 2.1 多模式匹配:查找包含 error 或 warning 的行
grep -E "error|warning" app.log
# 2.2 重复匹配:查找包含 2-5 个连续 a 的行
grep -E "a{2,5}" test.txt
# 2.3 分组匹配:查找包含 "ab" 重复 1 次以上的行
grep -E "(ab)+" test.txt
部分结果展示:
(1)多模式匹配:查找包含 "pattern" 或 "ab" 的行
(2)重复匹配:查找包含 2-5 个连续 "a" 的行

5、grep 实战场景
5.1 系统管理场景
常见用法:
# 1.1 查找系统中普通用户(UID ≥ 1000)
grep -E "^[^:]+:[^:]+:[1-9][0-9]{3,}" /etc/passwd
# 1.2 分析 Nginx 日志:统计 404 状态码的请求数
grep -c " 404 " access.log
# 1.3 查找 IP 地址:从日志中提取所有 IP
grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" access.log
部分结果展示:
提取类 IP 格式的数字段(模拟日志提取 IP)

5.2 开发 / 运维场景
常见用法:
# 2.1 查找代码中未注释的 TODO
grep -v "^#" ./src/*.py | grep "TODO"
# 2.2 静默匹配:仅判断文件是否包含指定内容(无输出,返回状态码)
grep -q "prod" config.ini && echo "生产环境配置" || echo "测试环境配置"
# 2.3 显示匹配行前后 3 行(上下文)
grep -C 3 "critical error" app.log
部分结果展示:

6、总结
grep 的核心是 "精准搜索",通过选项 + 正则表达式的组合,可满足从简单字符串匹配到复杂模式检索的所有需求。记住**-i 、-n 、 -v 、-r、 -E**这几个高频选项,就能解决日常 90% 的搜索场景。