sed 删除文件指定行需用 d 命令:按行号删如 '5d'、'3,7d'、'$d';按内容匹配删如 '/^$/d'、'/error/Id'、'/^#/d';加 -i 就地修改,可带 .bak 备份;用 ! 取反实现条件保留或删除。

sed 是 Linux 下强大的流式文本处理工具,删除文件中指定行非常常见,关键在于准确指定行号或匹配模式。
按行号删除单行或连续多行
用 d 命令删除,行号直接写在命令前:
- 删除第 5 行:
sed '5d' file.txt(仅显示结果,不修改原文件) - 删除第 3 到第 7 行:
sed '3,7d' file.txt - 删除最后一行:
sed '$d' file.txt($表示末行)
按内容匹配删除(正则方式)
适合删除含特定字符串或符合某模式的行:
- 删除所有空行:
sed '/^$/d' file.txt(^$匹配开头即结尾的行) - 删除包含 "error" 的行(不区分大小写):
sed -i '/error/Id' file.txt - 删除以 "#" 开头的注释行:
sed '/^#/d' file.txt
就地修改文件(保存到原文件)
默认 sed 不改原文件,加 -i 选项才真正删除:
- 安全做法:先备份再修改,
sed -i.bak '10d' file.txt→ 生成file.txt.bak并删第 10 行 - 不备份直接改:
sed -i '2,4d' file.txt(慎用,无备份不可逆)
组合条件与排除使用
有时需要“删除了某类行之外的其他行”,可用 ! 取反:
- 只保留含 "success" 的行,其余全删:
sed '/success/!d' file.txt - 删除第 1–10 行中不包含 "log" 的行:
sed '1,10{/log/!d}' file.txt


















