从文件末尾删除换行符

Jay*_*hri 8 unix newline file

我想\n仅从unix中的文件末尾删除换行符,
例如

abc  
def  
ghi
?
Run Code Online (Sandbox Code Playgroud)

输出应该是

abc  
def  
ghi
Run Code Online (Sandbox Code Playgroud)

在文件的末尾不应该有一个单一的 \n

Ale*_*man 12

您可以:

perl -pe 'chomp if eof' file1 > file2
Run Code Online (Sandbox Code Playgroud)

例:

$ cat file1
abc
def
ghi
$ perl -pe 'chomp if eof' file1 > file2
$ cat file2
abc
def
ghi$ 
Run Code Online (Sandbox Code Playgroud)

  • 注意,如果`file1`与`file2`相同,它可能会删除该文件.被警告.发生在我身上.幸运的是我知道内容. (4认同)

zwo*_*wol 4

一般来说,如果文件最后一行末尾确实有换行符,Unix文本工具会更满意。为什么需要删除它?

你不能用 来做到这一点(据我所知)awk,但是用 来做到这一点很容易perl

perl -e 'undef $/; $_ = <>; s/\R\z//; print'
Run Code Online (Sandbox Code Playgroud)

编辑:多年后,我突然想到您可能的意思是“如何从文件末尾删除尾随空白行”;换句话说,您可能希望仅在文件末尾将两个或多个连续换行符减少为单个换行符。同样,这是最简单的perl

perl -e 'undef $/; $_ = <>; s/\s+\z/\n/; print'
Run Code Online (Sandbox Code Playgroud)

(这将破坏任意尾随空白字符,而不仅仅是换行符。这几乎肯定是您想要的。)