sed 通过地址范围限定替换行,支持“起始,结束”“起始,+n”和“起始,$”三种格式:如'3,5s/error/warning/'替换第3–5行首次匹配,'1,+2s/foo/bar/g'替换第1–3行全部匹配,'8,$s/todo/done/g'替换第8行至末行。

要让 sed 只在指定行范围内替换文本,关键是在替换命令前加上地址范围(address range),格式为 起始行号,结束行号 或 起始行号,+N(表示从该行起连续 N+1 行)。它不会影响其他行,也不需要额外条件判断。
指定连续多行替换
用逗号分隔两个行号,表示处理从第 A 行到第 B 行(含首尾)的所有行:
- 将第 3 到第 5 行中首次出现的 “error” 替换为 “warning”:
sed '3,5s/error/warning/' file.txt - 将第 2 到第 4 行中所有 “old” 替换为 “new”,全局生效:
sed '2,4s/old/new/g' file.txt
从某行开始替换固定行数
用 行号,+数字 表示“从该行起,包括自身共 N 行”(注意:+ 后数字是“额外行数”,不是总行数):
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 从第 1 行开始,替换接下来 3 行(即第 1–3 行)中的 “foo” 为 “bar”:
sed '1,+2s/foo/bar/g' file.txt - 从第 10 行起,替换其后 1 行(即只改第 10 和第 11 行):
sed '10,+1s/abc/xyz/' file.txt
结合结尾符号 $ 处理末尾区域
$ 表示最后一行,可与数字组合实现“从某行到文件末尾”的替换:
- 将第 8 行到最后一行中所有 “TODO” 替换为 “DONE”:
sed '8,$s/TODO/DONE/g' file.txt - 只在倒数三行中把 “test” 换成 “prod”,需先算出行号或用 awk 配合;sed 本身不支持倒序计数,但可用 $(wc -l 动态生成地址范围。
就地修改并保留备份
加 -i 参数直接写入原文件,推荐加扩展名自动备份:
- 把第 1 到第 10 行的 “http://” 全部改为 “https://”,同时生成 .bak 备份:
sed -i.bak '1,10s/http:/https:/g' config.txt - 若只想预览效果,先去掉 -i,确认无误再执行带 -i 的版本。










