Linux 文本处理三剑客与正则表达式:从入门到精通
·
Linux 文本处理三剑客与正则表达式:从入门到精通
一、开篇:三剑客与正则 ——Linux 文本处理的核心武器
在 Linux/Unix 系统中,grep、sed、awk被称为 “文本处理三剑客”,它们是命令行下处理文本、日志、配置文件的最强组合,而正则表达式(Regular Expression) 则是这三大工具的 “灵魂”。
grep:擅长行级文本过滤、搜索,速度最快
sed:擅长行级文本编辑、替换、删除、插入(流编辑器)
awk:擅长列级文本分析、统计、格式化输出(报告生成器)
本文将系统讲解正则表达式基础、三剑客各自语法、正则差异、实战案例,覆盖基础→进阶→面试高频全场景。
二、正则表达式核心:基础与扩展(BRE/ERE)
2.1 什么是正则?
正则是一套字符串匹配规则,用特定符号描述 “要找什么文本”,三剑客、vim、Python/Java 等语言均支持。
2.2 基础正则(BRE):grep 默认支持(无需转义)
| 元字符 | 作用 | 示例 | 匹配结果 |
|---|---|---|---|
^ |
匹配行首 | ^root |
以 root 开头的行 |
$ |
匹配行尾 | sh$ |
以 sh 结尾的行 |
. |
匹配任意单个字符(除换行) | a.c |
abc、a1c、a@c |
* |
前一个字符出现 0 次或多次 | go*d |
gd、god、good |
[] |
匹配括号内任意一个字符 | [a-z0-9] |
小写字母 / 数字 |
[^] |
匹配非括号内字符 | [^0-9] |
非数字 |
\ |
转义符(取消特殊含义) | \. |
匹配真实的点 |
2.3 扩展正则(ERE):需 grep -E /sed -r /awk 直接支持
在 BRE 基础上增加,功能更强、写法更简洁:
表格
| 元字符 | 作用 | 示例 | 匹配结果 | ||
|---|---|---|---|---|---|
+ |
前一个字符1 次或多次 | go+d |
god、good(不匹配 gd) | ||
? |
前一个字符0 次或 1 次 | colou?r |
color、colour | ||
() |
分组、后向引用 | (123)+ |
123、123123 | ||
| ` | ` | 或(多选一) | `error | warn` | 含 error 或 warn |
{n} |
精确 n 次 | [0-9]{3} |
3 位数字 | ||
{n,} |
≥n 次 | [0-9]{2,} |
≥2 位数字 | ||
{n,m} |
n~m 次 | [0-9]{2,4} |
2-4 位数字 |
2.4 三剑客正则支持对比
工具 基础正则 (BRE) 扩展正则 (ERE) 启用方式
grep ✅ 默认 ✅ -E 或 egrep
sed ✅ 默认 ✅ -r / -E
awk ✅ ✅ 默认 直接支持
关键区别:sed/grep 默认 BRE,()+?|{}需\转义;awk 默认 ERE,直接写即可。
三、grep:行过滤之王(正则实战)
3.1 核心语法
grep [选项] “正则模式” 文件名
3.2 常用选项(高频)
-i:忽略大小写
-v:反向匹配(不匹配的行)
-n:显示行号
-o:只输出匹配片段(非整行)
-E:启用扩展正则
-w:匹配完整单词
-A/B/C n:匹配行后 / 前 / 上下 n 行
3.3 grep 正则实战(必练)
1)基础匹配
# 匹配含root的行
grep "root" /etc/passwd
# 匹配以root开头、bash结尾的行
grep "^root.*bash$" /etc/passwd
# 匹配空行
grep "^$" test.txt
2)扩展正则(-E)
# 匹配含error或warn
grep -E "error|warn" app.log
# 匹配手机号(11位)
grep -E "1[3-9][0-9]{9}" info.txt
# 匹配合法IP(完整版)
grep -E "((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])" ip.txt
3)提取 IP(只输出 IP)
ifconfig ens33 | grep -Eo "inet [0-9.]+" | awk '{print $2}'
四、sed:流编辑器(正则 + 增删改查)
4.1 核心语法
sed [选项] "地址 命令" 文件名
# 地址:行号/正则;命令:p/d/s/a/i/c
4.2 常用选项
-n:静默输出(只打印匹配行)
-i:直接修改文件(危险!先备份)
-r:启用扩展正则
4.3 核心命令
p:打印(常配 - n)
d:删除
s/旧/新/修饰:替换(最常用)
a:行后追加
i:行前插入
4.4 sed 正则实战
1)行过滤(正则匹配)
# 打印含root的行(-n+p)
sed -n "/root/p" /etc/passwd
# 删除空行
sed "/^$/d" test.txt
# 删除#开头的注释行
sed "/^#/d" /etc/shells
2)文本替换(s///)
# 全局替换(g):root→admin
sed "s/root/admin/g" /etc/passwd
# 替换第1-5行的root→admin
sed "1,5s/root/admin/g" /etc/passwd
# 后向引用(分组):提取IP
ifconfig ens33 | sed -n "s/.*inet \([0-9.]\+\).*/\1/p"
3)扩展正则(-r)
# 匹配多个关键词(|)
sed -nr "/error|warn/p" app.log
# 匹配连续数字
sed -nr "/[0-9]{3,}/p" test.txt
五、awk:列分析神器(正则 + 字段 + 统计)
5.1 核心语法(最强结构)
awk [选项] 'BEGIN{初始化} 模式{动作} END{汇总}' 文件名
默认分隔符:空格 / 制表符
$0:整行;1−1-1−n:第 1-n 列
5.2 常用选项
-F:指定分隔符(如 - F:、-F,)
5.3 awk 正则实战
1)正则匹配行
# 匹配含root的行并打印第1、7列
awk '/root/ {print $1,$7}' /etc/passwd
# 匹配以r开头、sh结尾的行
awk '/^r.*sh$/ {print $0}' /etc/passwd
2)字段过滤 + 正则
# 第3列UID>1000,打印用户名
awk -F: '$3>1000 {print $1}' /etc/passwd
# 第7列匹配bash
awk -F: '$7~/bash/ {print $1}' /etc/passwd
3)统计 + IP 提取
# 统计访问IP次数(Nginx日志)
awk '{ip[$1]++} END{for(i in ip) print i,ip[i]}' access.log
# 提取ens33 IP
ifconfig ens33 | awk '/inet/ {print $2}'
六、三剑客正则差异与避坑(面试重点)
6.1 转义差异(最易错)
grep/sed(BRE): ()+?|{} 必须加\
# grep BRE:匹配a或b
grep "a\|b" test.txt
# sed BRE:分组
sed "s/\(hello\)world/\1123/g" test.txt
grep -E/sed -r/awk(ERE): 直接写 无需转义
grep -E "a|b" test.txt
awk '/a|b/ {print}' test.txt
6.2 匹配范围
grep:整行匹配,输出整行 /-o 片段
sed:整行处理,增删改整行
awk:行 + 列双维度,精准字段匹配
6.3 常见坑
.匹配任意字符,匹配真实点必须.
**是前字符 0~ 多次,不是任意字符串(.***才是任意)
^匹配空行,不是空格行(空格行:[[:space:]]∗匹配空行,不是空格行(空格行:^[[:space:]]*匹配空行,不是空格行(空格行:[[:space:]]∗)
sed -i直接改文件,先测试再加 - i
七、综合实战:日志分析(三剑客联动)
场景:提取 Nginx 日志中访问 > 10 次的 IP
# 1. grep过滤有效行
# 2. awk统计IP次数
# 3. sort排序
# 4. awk过滤>10次
grep "200 OK" access.log \
| awk '{ip[$1]++} END{for(i in ip) print i,ip[i]}' \
| sort -k2nr \
| awk '$2>10 {print}'
场景:批量替换配置文件注释
# 把#注释改为//注释(保留内容)
sed -r "s/^#(.*)/\/\/\1/" /etc/config.conf
八、总结与学习路径
8.1 三剑客定位
grep:找内容(行过滤)
sed:改内容(行编辑)
awk:算内容(列统计)
8.2 正则学习步骤
记牢BRE/ERE 元字符
掌握三剑客正则差异
多练IP、手机号、日志等实战场景
结合管道|实现复杂文本处理
8.3 面试高频题
如何用 grep 匹配合法 IP?
sed 替换与后向引用用法?
awk 统计 IP 访问次数?
BRE 与 ERE 区别?
九、结尾
8.1 三剑客定位
grep:找内容(行过滤)
sed:改内容(行编辑)
awk:算内容(列统计)
8.2 正则学习步骤
记牢BRE/ERE 元字符
掌握三剑客正则差异
多练IP、手机号、日志等实战场景
结合管道|实现复杂文本处理
8.3 面试高频题
如何用 grep 匹配合法 IP?
sed 替换与后向引用用法?
awk 统计 IP 访问次数?
BRE 与 ERE 区别?
九、结尾
Linux 三剑客 + 正则是运维、开发必备技能,正则是基础,三剑客是应用。先吃透正则元字符,再针对性练习 grep/sed/awk 语法,最后通过实战日志、配置文件处理强化,即可快速掌握命令行文本处理的核心能力。
更多推荐




所有评论(0)