在 Linux Shell 文本处理中,sed(Stream Editor,流编辑器) 是不可或缺的核心工具,它以行为单位处理文本,无需加载整个文件,高效完成替换、删除、插入、修改、筛选等操作,是运维、日志处理、配置文件修改的必备技能。
本文从零开始,用最通俗的语言、最实用的案例,带你彻底掌握 sed 基础用法,可直接用于工作与面试。
一、sed 核心认知
1.1 什么是 sed
- 非交互式文本编辑器,逐行读取、逐行处理、逐行输出
- 默认不修改原文件,只输出到标准输出
- 支持正则表达式,处理文本灵活强大
- 常用于:批量替换、删除空行、注释配置项、提取文本、格式化内容
1.2 基本语法
sed [选项] '命令/地址/操作' 文件名
常用选项:
-n:静默输出,只打印匹配 / 指定的行-i:直接修改原文件(慎用,建议先测试)-i.bak:修改前备份原文件(安全用法)-e:执行多个 sed 命令-r:支持扩展正则表达式
二、sed 最常用核心操作
2.1 替换操作:s(最常用)
替换是 sed 使用率最高的功能,语法:
sed 's/旧内容/新内容/标志' 文件名
常用标志
g:全局替换(默认只替换每行第 1 个匹配)i:忽略大小写数字:只替换第 N 个匹配p:打印替换后的行(配合-n)
实战案例
1. 基础替换(每行第一个匹配)
sed 's/root/admin/' test.txt
2. 全局替换(所有匹配都替换)
sed 's/root/admin/g' test.txt
3. 忽略大小写替换
sed 's/root/admin/gi' test.txt
4. 只替换第 2 个匹配
sed 's/root/admin/2' test.txt
5. 路径替换(换分隔符避免转义)当内容含 / 时,用 | # @ 做分隔符更安全:
sed 's|/bin/bash|/bin/sh|g' /etc/passwd
2.2 删除操作:d
删除指定行 / 匹配行,语法:
sed '地址d' 文件名
实战案例
1. 删除第 3 行
sed '3d' test.txt
2. 删除第 3~5 行
sed '3,5d' test.txt
3. 删除最后一行
sed '$d' test.txt
4. 删除包含指定字符串的行
sed '/test/d' test.txt
5. 删除空行
sed '/^$/d' test.txt
6. 删除从匹配行到文件末尾
sed '/end/,$d' test.txt
2.3 插入 / 追加 / 整行替换:i /a/c
i:在指定行前面插入a:在指定行后面追加c:替换整行内容
实战案例
1. 第 2 行前插入文本
sed '2i\插入的内容' test.txt
2. 第 2 行后追加文本
sed '2a\追加的内容' test.txt
3. 替换第 2 行整行
sed '2c\这行被完全替换' test.txt
4. 匹配行前插入分隔线
sed '/error/i\=====错误行=====' test.txt
2.4 打印操作:p(配合 -n)
-n 禁止默认输出,p 只打印指定行,实现文本筛选。
实战案例
1. 只打印第 3 行
sed -n '3p' test.txt
2. 打印第 3~5 行
sed -n '3,5p' test.txt
3. 打印包含指定内容的行
sed -n '/root/p' /etc/passwd
4. 打印带数字的行
sed -n '/[0-9]/p' test.txt
三、sed 地址定位(精准控制操作范围)
sed 支持两种地址定位:行号范围、模式匹配范围。
3.1 行号范围
n:第 n 行n,m:第 n 到 m 行n,$:第 n 行到文件末尾$:最后一行
3.2 模式范围
/pattern1/,/pattern2/:从匹配 pattern1 的行,到匹配 pattern2 的行
案例:范围内替换
# 从 first 到 last 之间,把 line 替换为 LINE
sed '/first/,/last/s/line/LINE/g' test.txt
四、sed 高级实战(工作必用)
4.1 配置文件批量处理
1. 注释配置项
sed 's/^\(app.debug=\)/#\1/' config.ini
2. 取消注释
sed 's/^#\+\(.*app.maintenance.*\)/\1/' config.ini
3. 修改配置值
sed '/^app.debug=/s/=.*/=false/' config.ini
4.2 文本清洗
1. 删除 HTML 标签
sed 's/<[^>]*>//g' index.html
2. 合并所有行为一行
sed ':a;N;$!ba;s/\n/ /g' test.txt
3. 给文本加行号
sed '=' test.txt | sed 'N; s/\n/ /'
4.3 安全修改文件
# 直接修改
sed -i 's/old/new/g' test.txt
# 修改前自动备份为 test.txt.bak
sed -i.bak 's/old/new/g' test.txt
五、sed 速记表(建议收藏)
| 命令 | 作用 |
|---|---|
s/old/new/g | 全局替换 |
3d | 删除第 3 行 |
$d | 删除最后一行 |
/^$/d | 删除空行 |
2i\内容 | 第 2 行前插入 |
2a\内容 | 第 2 行后追加 |
-n '3p' | 只打印第 3 行 |
-i | 直接修改原文件 |
-i.bak | 备份 + 修改 |
六、总结
sed 是 Linux 文本处理三剑客(grep/sed/awk)中最擅长批量修改的工具:
- 简单文本替换 / 删除 → 用 sed
- 配置文件批量修改 → 用 sed
- 日志清洗、格式转换 → 用 sed
掌握本文内容,足以应对 90% 的日常 Shell 文本处理场景。
1万+

被折叠的 条评论
为什么被折叠?



