Jef*_*ave 0 regex perl newline
我收到的文本文件是固定长度字段和回车/换行符分隔记录 ( 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
Run Code Online (Sandbox Code Playgroud)
这个想法是
CRLF用。。。来代替CRLF用。。。来代替 CR用。。。来代替CRLF由于某种原因,我不太明白 CR -> CRLF 转换。
建议?
当它前面没有紧接着时,为什么不替换\x0A(用空格)\x0D
s/(?<!\x0D)\x0A/ /;
Run Code Online (Sandbox Code Playgroud)
这使用负回顾
将文件读入字符串(“slurp”它)可能是最安全的,因为不清楚那些 LF/CRLF 将如何“逐行”读取它——操作系统上的“行”是什么?这是处理过的吗?所以
perl -0777 -wpE's/(?<!\x0D)\x0A/ /g' file
Run Code Online (Sandbox Code Playgroud)
这将打印出包含更改的文件。要就地更改它,请添加-i. 请参阅链接的文档。