Linux sed 流编辑器实战 —— 批量修改文本、替换、删除、插入(运维必备)
前言
sed 是 Linux 最核心的非交互式流编辑器,专门用来批量修改文本、替换字符串、删除行、插入行、注释配置,不用手动打开文件,一条命令搞定批量操作,是运维、开发处理文件的神器。
本文从基础语法到正则实战,全覆盖工作高频场景,看完彻底掌握 sed。
一、sed 核心作用
逐行读取文件内容 → 按规则处理 → 输出结果核心功能:
- 文本替换(最常用)
- 删除指定行
- 插入 / 追加行
- 注释 / 取消注释配置
- 批量修改文件内容
- 配合管道过滤文本
二、核心语法格式
bash
运行
sed [选项] '指令' 文件名高频必背选项
-n:只打印匹配到的行(取消默认全部输出)-i:直接修改文件内容(不加 - i 只预览不修改!)-e:多条指令同时执行-r:支持扩展正则表达式(工作必备)
常用指令
s:替换字符串(最常用)d:删除行p:打印行a:在行后追加i:在行前插入
三、基础实战(最常用)
1. 文本替换(核心:s / 旧 / 新 /g)
bash
运行
# 把文件中的 old 替换成 new(只预览,不修改文件) sed 's/old/new/g' test.txt # 直接修改文件(加 -i,生产常用) sed -i 's/old/new/g' test.txt # 只替换每行第1个匹配 sed 's/old/new/' test.txt2. 显示指定行(配合 -n)
bash
运行
# 只显示第 10 行 sed -n '10p' test.txt # 显示 5~10 行 sed -n '5,10p' test.txt3. 删除指定行
bash
运行
# 删除第 5 行 sed '5d' test.txt # 删除空行 sed '/^$/d' test.txt # 删除包含关键词的行 sed '/error/d' test.txt4. 插入 / 追加行
bash
运行
# 第 2 行 前面插入 一行内容 sed '2i 插入的内容' test.txt # 第 2 行 后面追加 一行内容 sed '2a 追加的内容' test.txt四、正则表达式实战(核心进阶)
1. 常用正则元字符(和 grep 通用)
^行开头$行结尾.任意单个字符*重复 0 次或多次.*匹配任意内容[0-9]匹配数字+重复 1 次或多次(需要-r)|或条件(需要-r)
2. 正则实战案例
bash
运行
# 注释所有以 # 开头以外的行(配置常用) sed -r 's/^([^#])/#\1/' nginx.conf # 批量取消注释(去掉行首 #) sed -r 's/^#//' nginx.conf # 替换所有IP地址 sed -r 's/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/127.0.0.1/g' test.txt # 删除以数字开头的行 sed '/^[0-9]/d' test.txt # 替换多个关键词(a→A,b→B) sed -e 's/a/A/g' -e 's/b/B/g' test.txt五、工作流水线实战(最高频)
1. 批量注释配置文件
bash
运行
sed -i 's/^listen/#listen/' nginx.conf2. 批量取消注释
bash
运行
sed -i 's/^#listen/listen/' nginx.conf3. 批量替换端口号
bash
运行
sed -i 's/8080/80/g' server.conf4. 删除日志中的空行 + 注释行
bash
运行
sed -e '/^$/d' -e '/^#/d' app.log5. 实时日志过滤 + 替换
bash
运行
tail -f app.log | sed 's/ERROR/【错误】/g'六、总结(30 秒记住)
- 替换:
sed 's/旧/新/g' 文件 - 直接改文件:
sed -i - 删除行:
sed '/关键词/d' - 删除空行:
sed '/^$/d' - 正则批量:
sed -r - 工作标配:批量注释、替换配置、过滤日志
