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


当前回答

如果你是一个Vi用户,你可以打开文件并删除回车符:

:%s/\r//g

或与

:1,$ s/^M//

请注意,您应该通过按ctrl-v和ctrl-m键入^M。

其他回答

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

尝试将DOS文件转换为Unix文件:

fromdos file

这又是一个解决方案……因为总还有一个问题:

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

它很好,因为它可以在我使用过的所有unix/linux版本中工作。

如果你是一个Vi用户,你可以打开文件并删除回车符:

:%s/\r//g

或与

:1,$ s/^M//

请注意,您应该通过按ctrl-v和ctrl-m键入^M。

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

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

-i将编辑文件,而.bak将创建原始文件的备份,复制您的文件并在末尾添加扩展名.bak。(你可以在-i后面指定任何你想要的,或者只指定-i来不创建备份。)

替换操作符's/\r//'周围的强引号是必不可少的。如果没有它们,shell将把\r解释为转义+r,并将其简化为纯r,并删除所有小写r。这就是为什么Rob在2009年给出的答案不起作用。

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