首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GNU删除尾随换行符

使用GNU删除尾随换行符
EN

Stack Overflow用户
提问于 2015-12-13 17:58:41
回答 3查看 289关注 0票数 1

我正在尝试使用sed一行来删除使用手提式sed单线之一的尾随换行符

代码语言:javascript
复制
sed --in-place -e :a -e '/^\n*$/{$d;N;ba}'

它适用于UNIX风格的换行符,但不适用于DOS风格的换行符。尽管我无法完全理解sed脚本语法和匹配规则,但我还是尝试了这样做:

代码语言:javascript
复制
sed --binary --in-place -e :a -e '/^\(\r\?\n\)*$/{$d;N;ba}'

但没什么用,我也不知道为什么。

我真的不想使用Perl等等,我想坚持使用更多的“核心”实用程序。那么,周围有什么sed大师吗?我非常感谢你的帮助。我在使用Cygwin的sed发行版。

谢谢。

具体来说,我希望这个文件(使用cat -A打印出来):

代码语言:javascript
复制
1^M$
^M$
^M$

变成这样:

代码语言:javascript
复制
1$
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-13 20:29:24

是啊,起作用了:

代码语言:javascript
复制
sed --binary --in-place -e :a -e '/^\(\r\n\)*\r$/{$d;N;ba}'

希望真的删除这个问题,但为时已晚。

票数 0
EN

Stack Overflow用户

发布于 2015-12-13 19:10:03

你想用错误的工具来做这份工作。sed是用于单个行上的简单替换,仅此而已。对于更有趣的东西,您应该使用awk,例如,使用GNU awk的一种方法是:

代码语言:javascript
复制
$ cat -v file
1^M
^M
^M
$ awk -v RS='^$' -v ORS= '{sub(/(\r?\n)+$/,"\n")}1' file | cat -v
1

与其他鹰:

代码语言:javascript
复制
$ awk '{rec = rec $0 RS} END{sub(/(\r?\n)+$/,"\n",rec); printf "%s",rec}' file | cat -v
1

无论行尾是DOS还是UNIX,上述内容都可以工作。

票数 2
EN

Stack Overflow用户

发布于 2015-12-13 18:05:43

你能用这样的tr吗?

代码语言:javascript
复制
tr -d '\r\n' < file1 > tempfile && mv tempfile file1

这将翻译file1并删除\r\n

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

https://stackoverflow.com/questions/34254372

复制
相关文章

相似问题

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