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-1n:第 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 语法,最后通过实战日志、配置文件处理强化,即可快速掌握命令行文本处理的核心能力。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐