当前位置:  开发笔记 > 编程语言 > 正文

在Unix中删除回车

如何解决《在Unix中删除回车》经验,为你挑选了8个好方法。

\r在Unix中从文件中删除所有回车的最简单方法是什么?



1> paxdiablo..:

我会假设你的意思回车(CR,"\r",0x0d在)两端线,而不是在文件中只是一味的(你可以有他们在字符串的中间为我所知道的).CR仅在第一行末尾使用此测试文件:

$ cat infile
hello
goodbye

$ cat infile | od -c
0000000   h   e   l   l   o  \r  \n   g   o   o   d   b   y   e  \n
0000017

dos2unix 如果它安装在你的系统上,那就是要走的路:

$ cat infile | dos2unix -U | od -c
0000000   h   e   l   l   o  \n   g   o   o   d   b   y   e  \n
0000016

如果由于某种原因dos2unix无法使用,那么sed将会这样做:

$ cat infile | sed 's/\r$//' | od -c
0000000   h   e   l   l   o  \n   g   o   o   d   b   y   e  \n
0000016

如果出于某种原因sed无法使用,那么ed将以复杂的方式进行:

$ echo ',s/\r\n/\n/
> w !cat
> Q' | ed infile 2>/dev/null | od -c
0000000   h   e   l   l   o  \n   g   o   o   d   b   y   e  \n
0000016

如果您的盒子上没有安装任何这些工具,那么您遇到的问题比尝试转换文件要大:-)


详细说明@ steve的评论:在Mac上,使用以下命令:`sed"s/$(printf'\ r')\ $ //"`
`sed`和`echo`都不能识别MacO上的`\ r``.在这种情况下,只有`printf"\ r"`似乎有效.
`\ r`只适用于GNU sed,否则你可以这样做:`sed \`echo"s /\r //"\``
要修复mac上的问题,你也可以在单引号sed字符串前加上`$`,如下所示:`sed $'s @\r @@ g'| od -c`(但如果你用`\n替换'你需要逃脱它)

2> Henrik Gusta..:
tr -d '\r' < infile > outfile

见tr(1)


1.大多数unixy工具都是这样工作的,而且它通常是最安全的解决方法,因为如果搞砸了你还有原版.2.所述问题是取消回车,而不是转换行结尾.但是还有很多其他答案可能会对你有所帮助.
不是很好:1.不能在原地工作,2.可以替换\ r也不能在EOL(可能是也可能不是你想要的......).

3> plinth..:

老套:

tr -d '\r' < filewithcarriagereturns > filewithoutcarriagereturns



4> Emil H..:

有一个名为dos2unix的实用程序存在于许多系统上,并且可以在大多数系统上轻松安装.


有时它也被称为fromdos(和todos).

5> wfjm..:

在我看来,Linux上最简单的方法是:

sed -i 's/\r$//g' 

强引号周围的替换操作's/\r//'必不可少的.如果没有它们,shell将解释\r为escape + r并将其缩小为plain r,并删除所有小写r.这就是为什么Rob在2009年给出的答案不起作用的原因.

并且添加/g修饰符可确保即使是多个\r也将被删除,而不仅仅是第一个.



6> Rob..:

sed -i s/\r// 或某些; 看到man sed或网上有关使用的丰富信息sed.

有一点需要指出的是上述"回车"的确切含义; 如果你真的是指单个控制字符"回车",那么上面的模式是正确的.如果你的意思更一般地说是CRLF(回车和换行,这是在Windows下实现换行的方式),那么你可能想要替换它\r\n.Linux/Unix中的裸线馈送(换行符)是\n.


仅供参考,`s /\r //`似乎不会删除OS X上的回车,它似乎会删除文字`r`字符.我不知道为什么会这样.也许它与引用字符串的方式有关?作为一种解决方法,使用`CTRL-V + CTRL-M`代替`\ r``似乎可行.

7> Alex Giotis..:

如果您是Vi用户,则可以打开该文件并删除回车符:

:%s/\r//g

或者

:1,$ s/^M//

请注意,您应该按ctrl-v然后按ctrl-m键入^ M.


不太好:如果文件在每一行都有CR(即是一个正确的DOS文件),vim会用filetype = dos加载它,而不是显示`^ M`-s.解决这个问题是大量的击键,这不是vim的用途;).我只是选择`sed -i`,然后`-e's /\r $ $ g'来限制在EOL中删除CR.

8> 小智..:

再一次解决方案...因为总有一个解决方案:

perl -i -pe 's/\r//' filename

这很好,因为它已经到位并适用于我曾经使用过的unix/linux的各种风格.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有