处理含嵌入式Unix换行符的固定长度记录问题
解决文本中嵌入式LF替换问题
你的思路逻辑没问题,但失败原因是Perl的-p模式默认逐行处理,会自动剥离并添加换行符,干扰了分步替换逻辑。用单条Perl命令一次性读取整个文件处理就能解决:
perl -0777 -pe 's/(?<!\r)\n/ /g' badinput.txt > goodoutput.txt
关键说明
-0777:让Perl一次性读取整个文件内容,而非逐行拆分,这样能准确识别所有独立的LF和成对的CRLF。(?<!\r)\n:使用负向零宽断言,仅匹配前面没有回车符(CR)的换行符(LF)——也就是你要处理的嵌入式LF,将其替换为空格。- 原本的CRLF换行符会被完整保留,无需额外处理。
原命令失败的原因
你用多管道拆分步骤时,-p模式逐行处理会自动把每行末尾的CRLF剥离,导致后续替换CR为CRLF的步骤无法正确对应原本的换行标记,最终输出混乱。一次性读入整个文件就避开了这个问题。
内容的提问来源于stack exchange,提问作者Jefferey Cave
相关产品推荐
相关产品推荐

