首页 > 解决方案 > Perl 在 Windows 上将 LF 写为 CRLF

问题描述

我在几个文件中得到了一些杂散的 Windows 风格的行尾,我正在尝试使用以下命令在我的 Windows 机器上解决它:

perl -pi -e s/\R/\n/ example.txt

运行此文件后,运行文件中的所有行结尾都已更改为 CRLF,这与我的意图相反。为什么 perl 会这样做,我有什么可以改变的以使这项工作像我期望的那样工作吗?

我使用的是草莓 Perl 5.28 版。

标签: windowsperl

解决方案


Perl 的 Windows 版本:crlf默认为句柄添加一个层。这在读取时将 CRLF 转换为 LF,在写入时将 LF 转换为 CRLF。(其他一些语言也做类似的事情。)

你需要告诉 Perl 它不是一个文本文件。不幸的是,使用 ARGV(您正在使用的特殊句柄)无法做到这一点。

perl -pe"BEGIN { binmode STDOUT }" example.txt >example.new.txt
move example.new.txt example.txt

推荐阅读