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


当前回答

虽然这是一篇较老的文章,但最近我遇到了同样的问题。因为我有所有的文件重命名/tmp/blah_dir/,因为这个目录中的每个文件都有“/r”结尾字符(在文件末尾显示“?”),所以做脚本的方式是我唯一能想到的。

我想保存具有相同名称的最终文件(不拖尾任何字符)。 对于sed,问题是输出文件名,我需要提到其他东西(我不想要)。

我尝试了这里建议的其他选项(由于某些限制,不考虑dos2unix),但没有成功。

我尝试了“awk”,最后我使用“\r”作为分隔符,并采取了第一部分:

技巧是:

echo ${filename}|awk -F"\r" '{print $1}'

下面的脚本片段我用(我有所有文件有“\r”作为结尾字符在路径/tmp/blah_dir/)来解决我的问题:

cd /tmp/blah_dir/
for i in `ls`
  do
    mv   $i     $(echo $i | awk -F"\r" '{print $1}')
done

注:这个例子不是很精确,但接近我的工作(这里提到只是为了更好地了解我所做的工作)

其他回答

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

:%s/\r//g

或与

:1,$ s/^M//

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

tr -d '\r' < infile > outfile

看到tr (1)

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

事情是这样的,

%0d是回车字符。使它与Unix兼容。我们需要使用下面的命令。

dos2unix fileName。extension fileName.extension

如果你正在运行一个X环境,并且有一个合适的编辑器(visual studio代码),那么我会遵循以下建议:

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

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

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