【问题标题】:How to remove ^M (CRLF) from w file sent from Windows to linux FTP server in perl?如何从 perl 中从 Windows 发送到 linux FTP 服务器的文件中删除(CRLF)?
【发布时间】:2011-02-18 20:24:19
【问题描述】:

我通过 Net::FTP in perl(在 Windows 上生成)向基于 linux 的 FTP 帐户发送逗号分隔文件(ASCII)。问题是我在 linux 端的文件在每行末尾都有 ^M 。我知道我可以通过调用 该文件上的 dos2unix" 命令,但是如何在 Windows 端删除 ^M 以便我首先发送正确的文件。

我尝试执行以下操作,但这不会影响 linux 端的文件。

$content =~ s/^M//g;

【问题讨论】:

  • 我尝试了 $ftp->ascii 和 $ftp->binary 并没有改变任何东西。
  • 你在Windows端试过了吗?
  • 是的,当实际文件被创建然后发送到 linux FTP 时,我尝试在 windows 端的 perl 代码中应用所有这些解决方案。
  • 难住了。尝试使用其他 FTP 客户端上传?尝试在 Unix 端使用另一个 FTP 服务器?这正是 ascii() 应该做的。

标签: linux perl ftp ascii newline


【解决方案1】:

如果你有 "^","M",那么 s/\^M//g 就可以了。 (“^”在正则表达式模式中是特殊的。)如果你有一个 CR,那么 s/\r\n/\n/g(或只是 s/\r//g)会起作用。

如果两者都不起作用,请提供数据文件的“od -c”的一部分。

【讨论】:

    【解决方案2】:

    当你写文件时:

    open my $fh, '>:raw', $file or die "could not open $file: $!\n";
    

    见perldoc -f binmode。

    【讨论】:

    • 所以我绑定了 open (FH, '>:raw', $file) 但我仍然在 linux 端得到 ^M
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多