sed可高效批量删除配置文件特定行:连续行用“100,200d”,离散行用“5d;42d;99d”或脚本生成命令,支持备份、预览和差异核对,避免逐行调用,提升性能。

在 Linux 中,sed 可以高效地按行号批量删除配置文件中的特定行,尤其适合处理大规模文本(如数千行的 Nginx、Apache 或 hosts 配置)。关键在于避免逐行调用 sed,而应一次性指定多行范围或行号列表。
直接删除连续行号范围
若要删除第 100 到 200 行(含):
sed -i '100,200d' config.conf
说明:
- -i 表示就地修改(原文件被覆盖),加后缀如 -i.bak 可先备份;
- 100,200d 是地址范围 + 删除命令,效率高,不遍历整文件所有行;
- 对超大文件(GB 级),该方式仍保持低内存占用,因 sed 流式处理。
批量删除离散行号(如第 5、42、99、200 行)
使用多个地址表达式拼接(注意顺序无关,sed 内部会优化):
sed -i '5d;42d;99d;200d' config.conf
更可读写法(换行分隔,功能相同):
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
sed -i -e '5d' -e '42d' -e '99d' -e '200d' config.conf
提示:
- 行号超出文件总行数不会报错,sed 自动忽略;
- 若行号来自变量或脚本生成,可用命令替换构建表达式,例如:lines="5 42 99 200"; sed -i "$(echo $lines | sed 's/ /d;/g')d" config.conf
从文件读取待删行号并执行(适合数百/千行删除)
假设有 to_delete.txt,每行一个行号(如 12、88、1005):
sed -i "$(sed ':a;N;$!ba;s/\n/;d;/g;s/$/d/' to_delete.txt)" config.conf
等价的清晰脚本写法(推荐用于复杂场景):
#!/bin/bash
del_list=$(paste -sd';' to_delete.txt | sed 's/$/d/')
sed -i "$del_list" config.conf
说明:
- paste -sd';' 把行号合并为 12;88;1005;
- 后续补 d 得到 12d;88d;1005d,sed 可直接识别;
- 此法比循环调用 sed -i 快数十倍,且避免重复 IO 开销。
安全操作:先预览再执行
用 sed 输出结果而不修改原文件,验证是否删对行:
sed '5d;42d;99d' config.conf | head -n 110
或查看被删行本身:
sed -n '5p;42p;99p' config.conf
建议流程:
- 先用 wc -l 查总行数;
- 用 sed -n '行号p' 抽样确认目标内容;
- 加 -i.bak 备份后再执行删除;
- 删除后用 diff config.conf.bak config.conf 快速核对差异。

















