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


当前回答

你可以简单地这样做:

$ echo $(cat input) > output

其他回答

如果你使用的操作系统(如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一样。如果您将这一行添加到~/。Bashrc文件(或其他shell的等效配置文件):

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

... 下次登录时(或运行source ~/.)您将能够在命令行上以与其他示例相同的方式使用dos2unix名称。

我用的是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)

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

Sed -i s/\r// <文件名>或someesuch;请参阅man sed或web上有关sed使用的丰富信息。

有一点需要指出的是上面“马车返回”的确切含义;如果您真正指的是单个控制字符“回车”,那么上面的模式是正确的。如果您指的是更一般的CRLF(回车和换行,这是Windows下换行的实现方式),那么您可能希望替换\r\n。Linux/Unix中的换行符(换行符)是\n。

我将假设您是指行尾的回车符(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

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