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


当前回答

Cat input.csv | sed 's/\r/\n/g' > output.csv

为我工作

其他回答

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

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

fromdos file

对于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代码),那么我会遵循以下建议:

Visual Studio代码:如何显示行结束

只要转到屏幕的右下角,visual studio代码就会显示文件编码和文件后面的行结束约定,只需简单地单击就可以切换。

只要在linux环境下使用可视化代码作为notepad++的替代品,你就可以开始了。

在我看来,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。