如何使用sed移除文本中重复的全空格空白行?
针对你在RH5上处理遗留程序打印文件的需求,我整理了两个实用的解决方案,都是系统自带工具,不用额外安装软件,完美适配遗留环境:
方案1:使用awk(推荐,逻辑清晰易维护)
awk是处理文本行的利器,这个方案精准识别全空格空白行,只合并连续的重复空白行,完全不会改动其他行的空格格式:
awk 'BEGIN{prev_empty=0} /^[[:space:]]*$/{if(!prev_empty){print; prev_empty=1} next} {print; prev_empty=0}' your_print_file.txt | lp
逻辑拆解:
BEGIN{prev_empty=0}:初始化标记,默认上一行不是空白行/^[[:space:]]*$/:匹配所有由空格/制表符组成的空白行(如果你的文件只有空格,也可以写成/^ *$/,更精准)- 当遇到空白行时,只有上一行不是空白行才打印,同时标记“上一行是空白行”;重复的空白行直接跳过
- 非空白行直接打印,并重置标记为“上一行不是空白行”
方案2:使用sed(紧凑单行命令)
如果你偏爱更简洁的单行命令,sed也能实现同样效果:
sed '/^[[:space:]]*$/{N;/^\n[[:space:]]*$/D}' your_print_file.txt | lp
逻辑拆解:
- 匹配到空白行后,读取下一行合并成多行模式
- 如果合并后的两行都是空白行,就删除第一行并循环处理,直到只剩一行空白行
- 非空白行正常输出,完全保留原有格式
集成到打印流程
如果你的遗留程序是直接输出到打印管道,可以直接把处理命令插进去:
your_legacy_program | awk 'BEGIN{prev_empty=0} /^[[:space:]]*$/{if(!prev_empty){print; prev_empty=1} next} {print; prev_empty=0}' | lp
这样就能在打印前自动处理重复空白行,完全不影响原有带内容行的格式。
内容的提问来源于stack exchange,提问作者Hussain Akbar
相关产品推荐
相关产品推荐

