/^$/d 是最直接删除纯空行的写法,仅匹配行首到行尾间无任何字符的行,不处理含空格或制表符的空白行。

sed '/^$/d' 是最直接的空行删除写法
匹配并删除纯空行(即不含任何字符,包括空格和制表符)时,/^$/d 是最简洁有效的模式。它用 ^ 锚定行首、$ 锚定行尾,中间无任何内容,精准对应“真正空”的行。
注意:这个正则不会删掉只含空格或制表符的“空白行”,如果文件里混有带缩进但无文字的行,它会原样保留——这不是 bug,是设计使然。
- 预览效果(不改原文件):
sed '/^$/d' file.txt - 原地修改(慎用!):
sed -i '/^$/d' file.txt - 批量处理多个文件:
sed -i '/^$/d' *.log *.conf
要删“空白行”(含空格/制表符),得用 /^[[:space:]]*$/d
很多配置文件或日志导出后,空行其实藏了空格或 \t,/^$/ 对这种行完全失效。此时必须升级正则,用 [[:space:]]* 匹配零个或多个空白字符(含空格、tab、换行符等)。
GNU sed 支持该写法;macOS 自带的 BSD sed 不支持 [[:space:]],需改用 /^[ \t]*$/d(显式列出空格和 tab)。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- Linux(GNU sed):
sed -i '/^[[:space:]]*$/d' config.ini - macOS(BSD sed):
sed -i '' '/^[ ]*$/d' config.ini(注意-i ''的空字符串参数) - 跨平台脚本建议:先用
sed '/^[[:space:]]*$/d' file.txt | grep .验证是否真清干净
误加 -i 又没备份,恢复几乎不可能
sed -i 直接覆写原文件,不生成备份。一旦正则写错(比如误写成 /./d 删了所有非空行),原始内容就丢了。
- 安全做法永远分两步:先跑不带
-i的命令看输出,确认无误再加-i - 需要备份时,GNU sed 支持
-i.bak(生成file.txt.bak);BSD sed 必须写-i '.bak'(引号不能省) - 已误删?立刻停止对该文件的所有写操作,尝试用
debugfs(ext4)或photorec恢复,但成功率取决于磁盘使用强度
和 grep/awk 比,sed 在“原地编辑”上不可替代
grep -v '^$' 和 awk 'NF' 都能过滤空行,但它们必须重定向输出到新文件或管道,无法像 sed -i 那样直接修原文件——这对自动化部署脚本、CI 流程中清理临时配置特别关键。
性能上三者差异极小,10MB 以内文件基本无感;但若在循环里反复调用 grep 处理数百个文件,sed -i 的系统调用开销更低。
- 脚本中优先用
sed -i:简洁、原子、无需临时文件管理 - 调试或组合管道时用
grep -v '^$':更易读,且可无缝接入| sort | uniq等链式操作 - 需要按字段逻辑(如“跳过第1列为空的行”)才选
awk,单纯删空行没必要
或 \t\t ——它们不属于 /^$/ 的管辖范围,必须显式覆盖空白字符类。










