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

相关推荐
无水先生2 小时前
python应用的参数管理(2):argparse 函数的用法
网络·数据库·python
..过云雨2 小时前
【MySQL】2. MySQL数据库基础
数据库·mysql
专注VB编程开发20年2 小时前
早期的redis是进程内的字典列表操作,后面改成TCP网络调用
数据库·redis·算法·缓存
冰暮流星3 小时前
sql语言之replace语句和函数
数据库·sql·mysql
VALENIAN瓦伦尼安教学设备3 小时前
品牌故事:1964年塞纳河畔ASHOOTER激光对中仪诞生的夜晚
数据库·人工智能·嵌入式硬件
鸽芷咕3 小时前
平滑迁移无压力:金仓数据库迁移 MongoDB 的技术优势总结
数据库·金仓数据库
TDengine (老段)3 小时前
TDengine IDMP 高级功能——计量单位
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
三无少女指南3 小时前
开发者环境配置最佳实践:编辑器Cursor ,VS Code的上位体验实现 AI 与 WSL 联动
运维·c语言·数据库·windows·git·编辑器
山岚的运维笔记3 小时前
SQL Server笔记 -- 第80章:分页
java·数据库·笔记·sql·microsoft·sqlserver