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

相关推荐
zzb15802 小时前
RAG from Scratch-优化-query
java·数据库·人工智能·后端·spring·mybatis
一只鹿鹿鹿3 小时前
信息安全等级保护安全建设防护解决方案(总体资料)
运维·开发语言·数据库·面试·职场和发展
堕2743 小时前
MySQL数据库《基础篇--数据库索引(2)》
数据库·mysql
wei_shuo3 小时前
数据库优化器进化论:金仓如何用智能下推把查询时间从秒级打到毫秒级
数据库·kingbase·金仓
雷工笔记3 小时前
Navicat Premium 17 软件安装记录
数据库
wenlonglanying4 小时前
Ubuntu 系统下安装 Nginx
数据库·nginx·ubuntu
数据库小组4 小时前
10 分钟搞定!Docker 一键部署 NineData 社区版
数据库·docker·容器·database·数据库管理工具·ninedata·迁移工具
爬山算法4 小时前
MongoDB(38)如何使用聚合进行投影?
数据库·mongodb
l1t4 小时前
Deep Seek总结的APSW 和 SQLite 的关系
数据库·sqlite
Pocker_Spades_A5 小时前
基于代价模型的连接条件下推:复杂SQL查询的性能优化实践
数据库·sql·性能优化