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

时间:2021-03-31 15:29:17

标签: perl newline

我有一个文件是这样的:

dog   cat   mouse
apple    orange    pear
red    yellow    green

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

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

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

1 个答案:

答案 0 :(得分:2)

你可以试试这个:

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;