在Perl中,如何从文件中删除^ M?

Ale*_*ong 33 perl carriage-return hidden-characters

我有一个脚本将新字段附加到现有CSV,但是^M字符出现在旧行的末尾,因此新字段最终会出现在新行而不是同一行.如何^M使用Perl从CSV文件中删除字符?

Can*_*der 47

^ M是回车.你可以这样做:

$str =~ s/\r//g
Run Code Online (Sandbox Code Playgroud)


JDr*_*ago 23

或1个班轮:

perl -p -i -e 's/\r\n$/\n/g' file1.txt file2.txt ... filen.txt
Run Code Online (Sandbox Code Playgroud)

  • Perl Pie很容易记住这个. (2认同)

Ale*_*ong 15

你发现你也可以这样做:

$line=~ tr/\015//d;
Run Code Online (Sandbox Code Playgroud)


Roy*_*ico 7

稍微不相关,但要使用Perl从命令行中删除^ M,请执行以下操作:

perl -p -i -e "s/\r\n/\n/g" file.name
Run Code Online (Sandbox Code Playgroud)


小智 6

我更喜欢一个更通用的解决方案,可以使用DOS或Unix输入.假设输入来自STDIN:

while (defined(my $ln = <>))
  {
    chomp($ln);
    chop($ln) if ($ln =~ m/\r$/);

    # filter and write
  }
Run Code Online (Sandbox Code Playgroud)