在Unix中从文件中删除所有回车\r的最简单方法是什么?
当前回答
我用的是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)
其他回答
tr -d '\r' < infile > outfile
看到tr (1)
如果你是一个Vi用户,你可以打开文件并删除回车符:
:%s/\r//g
或与
:1,$ s/^M//
请注意,您应该通过按ctrl-v和ctrl-m键入^M。
我将假设您是指行尾的回车符(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
如果你没有在你的盒子上安装任何这些工具,你有比试图转换文件更大的问题:-)
Sed -i s/\r// <文件名>或someesuch;请参阅man sed或web上有关sed使用的丰富信息。
有一点需要指出的是上面“马车返回”的确切含义;如果您真正指的是单个控制字符“回车”,那么上面的模式是正确的。如果您指的是更一般的CRLF(回车和换行,这是Windows下换行的实现方式),那么您可能希望替换\r\n。Linux/Unix中的换行符(换行符)是\n。
事情是这样的,
%0d是回车字符。使它与Unix兼容。我们需要使用下面的命令。
dos2unix fileName。extension fileName.extension