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

相关推荐
forEverPlume9 分钟前
mysql如何实现高可用集群架构_基于MHA环境搭建与部署
jvm·数据库·python
草莓熊Lotso1 小时前
Vibe Coding 时代:LangChain 与 LangGraph 全链路解析
linux·运维·服务器·数据库·人工智能·mysql·langchain
zh1570236 小时前
JavaScript中WorkerThreads解决服务端计算瓶颈
jvm·数据库·python
代码AI弗森6 小时前
一文理清楚“算力申请 / 成本测算 / 并发评估”
java·服务器·数据库
摇滚侠7 小时前
expdp 查看帮助
java·数据库·oracle
流年似水~8 小时前
MCP协议实战:从零搭建一个让Claude能“看见“数据库的工具服务
数据库·人工智能·程序人生·ai·ai编程
2401_871492858 小时前
Vue.js监听器watch利用回调函数处理级联下拉框数据联动
jvm·数据库·python
志栋智能8 小时前
超自动化安全:构建智能安全运营的核心引擎
大数据·运维·服务器·数据库·安全·自动化·产品运营
zhoutongsheng9 小时前
C#怎么实现Swagger文档 C#如何在ASP.NET Core中集成Swagger自动生成API文档【框架】
jvm·数据库·python
WinterKay9 小时前
【开源】我写了一个轻量级本地数据库浏览工具,支持 MySQL/Redis 只读查询
数据库·mysql·开源