如何用Perl删除替换产生的空行并保留原始空行?
解决Perl替换后删除生成空行但保留原空行的问题
直接用perl -ne替代-p来手动控制打印逻辑,一次处理就能搞定,不用折腾特殊字符串:
perl -ne '$orig = $_; s/foo//g; print if $orig =~ /^\s*$/ || $_ !~ /^\s*$/'
逻辑说明:
-ne参数让Perl逐行读取输入,不会自动打印每行,方便我们自己决定要不要输出$orig = $_先把当前行的原始内容存起来,避免替换后丢失原信息s/foo//g执行你需要的替换操作- 打印条件分两种情况:
- 原始行本身就是空行(包括只含空白字符的行):直接打印,保留原空行
- 替换后的行不是空行:正常打印处理后的内容
这样就精准过滤掉了「原行有内容但替换后变成空行」的情况,完全符合需求,而且一次处理完成,没有特殊字符串冲突的问题。
内容的提问来源于stack exchange,提问作者user21749640
相关产品推荐
相关产品推荐

