Linux Shell 高级编程(1)——grep

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% 的搜索场景。

相关推荐
Tsuki_tl5 分钟前
【总结】Redis五大数据类型应用场景及基本命令
数据库·redis·后端·缓存·缓存中间件·redis命令·redis 五大数据类型
Gauss松鼠会6 分钟前
GaussDB 整体架构解析
运维·服务器·网络·数据库·sql·架构·gaussdb
系统集成-鹰翔11 分钟前
ERP对接升级提示数据库迁移失败:SQLite逐版本事务到底回滚到哪一步
javascript·数据库·经验分享·后端
西瓜拿铁好喝11 分钟前
开源和闭源 AI 办公工具,分别适合谁
java·前端·数据库
代码派21 分钟前
业务不停机迁移 MySQL 到 TiDB,NineData 数据增量同步实操演示
数据库·mysql·tidb·ninedata·无停机迁移·增量迁移·全量迁移
Gauss松鼠会26 分钟前
GaussDB 中 gsql 与 DBeaver(JDBC)客户端工具查询时间不一致:原因、排查与处理
运维·服务器·数据库·sql·gaussdb·经验总结
Elastic 中国社区官方博客31 分钟前
基于 Jina OCR v1 与 Elasticsearch 的 PDF 智能混合检索与 RAG 系统实战指南
大数据·数据库·elasticsearch·搜索引擎·ocr·jina
楚识科技38 分钟前
信创环境下 OCR 部署实践:从麒麟系统到达梦数据库的全栈适配
数据库·ocr
飞浪纪元[FWC–FE]43 分钟前
Qt 构建排错实录:从 MSB 1009 到生成器选型
开发语言·数据库·qt
Paper数据分析-经管学术43 分钟前
1985-2026年中国低空经济专利明细数据库
数据库