首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用sed删除最后一个换行符

使用sed删除最后一个换行符
EN

Stack Overflow用户
提问于 2018-05-28 12:33:58
回答 3查看 1.9K关注 0票数 2

如何从文件中删除最后一个\n。该文件具有为最后一个文本行中的换行符创建的最后一个空白行。我使用这个命令:

代码语言:javascript
复制
sed '/^\s*$/d'

但是las的空行并没有被删除。

EN

回答 3

Stack Overflow用户

发布于 2018-05-28 13:46:28

1)从文件中删除最后一个空行:

首先,您当前使用的命令将删除所有的空行和空行!

不仅仅是最后一个。

如果你想删除最后一行,如果它是空的,那么你可以使用下面的命令:

代码语言:javascript
复制
sed '${/^[[:blank:]]*$/d}' test

输入:

代码语言:javascript
复制
cat -vTE test                                                                                                                  
a$
$
b$
$
c$
^I ^I $

输出:

代码语言:javascript
复制
sed '${/^[[:blank:]]*$/d}' test                                                                                                
a

b

c

Explanations:

第一个line

  • /^[[:blank:]]*$/将告诉sed仅在最后一行上执行处理。条件将由sed求值,如果此行为空或仅由空白字符组成,则它将触发对模式缓冲区的删除操作,因此,最后一行将不会打印出来。您可以重定向sed命令的输出以将其保存到新文件中,或者使用-i选项就地进行更改(如果使用选项,请备份文件!),或者使用-i.bak强制sed在修改文件之前对文件进行备份。

重要信息:

如果您的文件来自Windows并且包含一些回车符(\r),则此sed命令将不起作用!您需要使用dos2unixtr -d '\r'删除这些嘈杂的字符。

对于包含回车符<CR> (\r^M)的文件:

修复文件前的

猫:

代码语言:javascript
复制
cat -vTE test 
a$
$
b$
$
c$
^I ^I ^M$

od:

代码语言:javascript
复制
od -c test 
0000000   a  \n  \n   b  \n  \n   c  \n  \t      \t      \r  \n
0000016

sed:

代码语言:javascript
复制
sed '${/^[[:blank:]]*$/d}' test                                                                                                
a

b

c

修复文件后的

代码语言:javascript
复制
dos2unix test 
dos2unix: converting file test to Unix format ...

猫:

代码语言:javascript
复制
cat -vTE test                                                                                                                  
a$
$
b$
$
c$
^I ^I $

od:

代码语言:javascript
复制
od -c test 
0000000   a  \n  \n   b  \n  \n   c  \n  \t      \t      \n
0000015

sed:

代码语言:javascript
复制
sed '${/^[[:blank:]]*$/d}' test                                                                                                
a

b

c

2)删除文件中的最后一个EOL字符:

对于这个特殊目的,我建议使用perl

代码语言:javascript
复制
perl -pe 'chomp if eof' test
a

b

c

您可以将-i选项添加到change in-place (在运行该命令之前备份文件)。最后但并非最不重要的一点是,您可能必须从您的文件中删除回车,如下所述。

票数 1
EN

Stack Overflow用户

发布于 2018-05-28 22:18:01

你的问题不清楚,但这可能是你想要的:

代码语言:javascript
复制
$ cat file
a
b
c

$ awk 'NR>1{print p} {p=$0}' file
a
b
c
$
票数 1
EN

Stack Overflow用户

发布于 2018-05-29 01:26:46

您还可以使用sed中的以下一行代码删除尾随空行:

sed -e :a -e '/^\n*$/N;/\n$/ba'

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50559170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档