最直接有效的方式是用 grep -v '^$' 精准筛掉纯空行;进阶可用 grep -v '^[[:space:]]*$' 去除含空白字符的伪空行;配合 -E 还可一并过滤注释行:grep -Ev '^[[:space:]]$|^[[:space:]][#;]'。

最直接有效的方式是用 grep -v '^$',它能精准筛掉纯空行。
基础用法:只去掉纯空行
执行命令:
grep -v '^$' filename
其中:
- -v 表示“反向匹配”,即显示不满足条件的行
- '^$' 是正则表达式,表示“行首紧接着就是行尾”,也就是真正意义上的空行
这个组合不会影响带空格、制表符或文字的行,只剔除完全空白的行。
进阶过滤:同时去掉空格/制表符构成的“伪空行”
很多配置文件里存在仅含空格或 Tab 的行,视觉上像空行,但 ^$ 匹配不到。此时改用:
grep -v '^[[:space:]]*$' filename
说明:
- [[:space:]] 是 POSIX 字符类,涵盖空格、Tab、换行、回车等所有空白字符
- * 表示前面的字符可出现零次或多次
- 整个表达式匹配“从行首开始、全是空白字符、直到行尾”的行,再用 -v 排除它们
配合重定向保存结果
如果想把过滤后的内容存为新文件:
grep -v '^[[:space:]]*$' config.conf > clean.conf
或者覆盖原文件(谨慎操作):
grep -v '^[[:space:]]*$' config.conf > temp && mv temp config.conf
顺带过滤注释行(常见配置场景)
处理 .conf 或 .ini 类文件时,常需一并去掉以 # 或 ; 开头的注释行:
grep -v '^[[:space:]]*$\|^[[:space:]]*[#;]' filename
解释:
- \| 是 -E 模式下的“或”逻辑(需加 -E 参数)
- 所以完整写法是:grep -Ev '^[[:space:]]*$|^[[:space:]]*[#;]'
这样就能一次性清理空行、空白行和注释行,得到干净的生效配置。


















