带有嵌入式 UNIX 换行符的 CSV (Perl)

问题描述 投票:0回答:2

我收到的文本文件是按位置分隔的字段和换行符分隔的记录 (

CRLF
)。最近,其中一个文本字段开始在记录中显示换行符 (
LF
)。这显然在我们的 unix 服务器上造成了一些问题。

我想简单地在文件中查找

LF
的使用并将其替换为单个空格,但这显然会干扰Windows换行符

我已经尝试过

tr
perl
但似乎不太正确:

cat badinput.txt | perl -p -e 's/\x0D\x0A/\x0D/' | perl -p -e 's/\0A/ /' | perl -p -e 's/\x0D/\x0D\x0A/' > goodoutput.txt

这个想法是

  • CRLF
    替换为
    CR
  • LF
    替换为
     
  • CR
    替换为
    CRLF

由于某种原因,我还没有完全理解 CR -> CRLF 转换。

建议?

bash perl unix newline
2个回答
0
投票

\x0A
 前面没有紧接时,为什么不替换 
\x0D

(用空格)
s/(?<!\x0D)\x0A/ /;

这使用了负回顾


0
投票

您需要使用

-0777
读取整个输入,然后进行替换:

cat badinput.txt | perl -0777pe 's/\r\n/\r/g;s/\n/ /g;s/\r/\r\n/g'
© www.soinside.com 2019 - 2024. All rights reserved.