在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环境下的记事本++的替代品,即可开始使用。