如何使用 Perl 从文件末尾删除换行符

How to remove newline from the end of a file using Perl

我有一个文件,内容如下:

dog   cat   mouse
apple    orange    pear
red    yellow    green

有一个制表符 \t 分隔每一行的单词,还有一个换行符 \n 分隔每一行。由于在 green 之后换行 \n,所以在最后一行 red yellow green 下面有一个空行。 我想使用 Perl 来删除换行符。

我看过一些类似 How can I delete a newline if it is the last character in a file? 的文章,它们给出了 Perl 的解决方案,但我想用硬代码来完成,这样我就可以将它合并到我的 Perl 脚本中。 我不知道这是否可能使用 chomp,或者 chomp 是否分别在每一行上工作(我想在行之间保留换行符)。

我之前也看到过建议在文件末尾保留一个换行符的评论,因为当文件以换行符结尾时 Unix 命令工作得更好。但是,我创建了一个脚本,它依赖于不以换行符结尾的输入文件,因此我真的觉得删除换行符对我的工作是必要的。

你可以试试这个:

perl -pe 'chomp if eof' file.txt

这是另一种简单的方法,如果您需要在脚本中使用它:

open $fh, "file.txt"; 
@lines=<$fh>;          # read all lines and store in array 
close $fh;
chomp $lines[-1];      # remove newline from last line
print @lines;

或类似这样的东西(在脚本中),如 jnhc 对命令行的建议:

open $fh, "file.txt"; 
while (<$fh>) { 
  chomp if eof $fh; 
  print; 
}
close $fh;