在Unix中删除回车

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

我假定你的意思是回车符( "\r", 0x0d )在行尾,而不是仅仅在文件中盲目地使用(你可以把它们放在string的中间,

 $ cat infile hello goodbye $ cat infile | od -c 0000000 hello \r \ngoodbye \n 0000017 

dos2unix是如果它安装在您的系统上的路要走:

 $ cat infile | dos2unix -U | od -c 0000000 hello \ngoodbye \n 0000016 

如果由于某种原因dos2unix不适用于你,那么sed会这样做:

 $ cat infile | sed 's/\r$//' | od -c 0000000 hello \ngoodbye \n 0000016 

如果由于某种原因, sed不可用,那么ed会以一种复杂的方式来做到这一点:

 $ echo ',s/\r\n/\n/ > w !cat > Q' | ed infile 2>/dev/null | od -c 0000000 hello \ngoodbye \n 0000016 

如果你的盒子上没有安装任何这些工具,那么比试图转换文件的问题更大。

 tr -d '\r' < infile > outfile 

参见tr(1)

老套:

 tr -d '\r' < filewithcarriagereturns > filewithoutcarriagereturns 

有一个叫做dos2unix的工具,存在于许多系统上,并且可以很容易地安装在大多数系统上。

sed -is/\r// <filename>或somesuch; 请参阅man sed或网上提供的关于sed使用的丰富信息。

有一点要指出的是上述“回车”的确切含义, 如果你确实是指单个控制字符“回车”,那么上面的模式是正确的。 如果你的意思,更一般的,CRLF(回车和换行,这是在Windows下实现换行),那么你可能想replace\r\n 。 Linux / Unix中的裸线提要(换行符)是\n

在Linux上最简单的方法是imho

  sed -i 's/\r//g' <filename> 

围绕替代运营商的强烈的报价必不可less的 。 如果没有他们,shell将把\r解释为\r +并将其简化为r ,并删除所有的小写r 。 这就是为什么Rob在2009年给出的答案不起作用。

添加/g修饰符可以确保多个\r将被删除,而不仅仅是第一个。

再一次的解决scheme…因为总有一个:

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

这是很好的,因为它已经到位,并在我工作过的任何unix / linux的味道。

如果您是Vi用户,则可以打开文件并使用以下命令删除回车:

 :%s/\r//g 

或与

 :1,$ s/^M// 

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

别人推荐dos2unix ,我强烈推荐它。 我只是提供更多的细节。

如果已安装,请跳到下一步。 如果尚未安装,我会build议通过yum安装它:

 yum install dos2unix 

那么你可以像这样使用它:

 dos2unix fileIWantToRemoveWindowsReturnsFrom.txt 

这是事情,

%0d是回车符。 使它与Unix兼容。 我们需要使用下面的命令。

dos2unix fileName.extension fileName.extension

试试这个将dos文件转换成unix文件:

fromdos文件

如果您使用的操作系统(如OS X)没有dos2unix命令,但具有Python解释器(版本2.5+),则此命令与dos2unix命令相同:

 python -c "import sys; import fileinput; sys.stdout.writelines(line.replace('\r', '\n') for line in fileinput.input(mode='rU'))" 

这就像dos2unix一样处理命令行上的两个命名文件以及pipe道和redirect。 如果将此行添加到〜/ .bashrc文件(或其他shell的等效configuration文件):

 alias dos2unix="python -c \"import sys; import fileinput; sys.stdout.writelines(line.replace('\r', '\n') for line in fileinput.input(mode='rU'))\"" 

…下一次login(或在当前会话中运行source ~/.bashrc ),您将能够以与其他示例中相同的方式在命令行上使用dos2unix名称。

你可以简单地做到这一点:

 $ echo $(cat input) > output 

我用python,在这里我的代码;

 end1='/home/.../file1.txt' end2='/home/.../file2.txt' with open(end1, "rb") as inf: with open(end2, "w") as fixed: for line in inf: line = line.replace("\n", "") line = line.replace("\r", "") fixed.write(line) 

对于UNIX …我注意到dos2unix从我的UTF-8文件中删除了Unicode标头。 在git bash(Windows)下,以下脚本似乎很好地工作。 它使用sed。 注意它只删除行尾的回车符,并保留Unicode标头。

 #!/bin/bash inOutFile="$1" backupFile="${inOutFile}~" mv --verbose "$inOutFile" "$backupFile" sed -e 's/\015$//g' <"$backupFile" >"$inOutFile" 

如果你正在运行一个X环境,并有一个适当的编辑器(Visual Studio代码),那么我会遵循这个build议:

Visual Studio代码:如何显示行尾

只要到屏幕的右下angular,Visual Studio代码就会显示文件编码和文件末尾的常规结尾,只需点击一下鼠标就可以切换。

只需使用可视化代码作为您在linux环境下的记事本++的替代品,即可开始使用。