将 DOS 文本文件转换为 Unix

将 DOS 文本文件转换为 Unix

我有一堆 DOS 格式的 PHP 脚本(vi显示[noeol] [dos]在状态行中),正如预期的那样,它们不可用。

我跑过dos2unix它们来修复行尾:

dos2unix index.php

但是当我打开文件时,我仍然在状态行上vi看到。[noeol]

在 vi 的十六进制编辑器模式 ( ) 中检查它们后,:%!xxd我没有看到任何让我惊讶的东西。

在原始文件中,行尾看起来像:0x0D 0x0A

如果运行完后dos2unix它们看起来像:0x0A

我还检查了文件的最后一行是否有正确的行尾,而且也在那里 ( 0x0A)。

还有什么可能导致这种情况,我应该担心吗?

我正在运行 CentOS 5.6 x64。

答案1

正如@Klox 所说,在 后running dos2unix,剩下的问题vi显示是最后一行缺少换行符。

如果您打开文件vi并保存它,它会为您添加换行符。

或者您可以批量完成整个操作ed

#!/bin/bash
for f in <list-of-files-goes-here>; do
    ed -s -- "$f" <<<$',s/\r//g\nw' >/dev/null
done

答案2

它只是警告您最后一行没有行尾 (\n)。

答案3

DOS 机器在行尾输入回车符 (eol),在 vi 中应该如下所示^M

尝试运行这个:

:%s/^M//g

答案4

如果您使用 vim(而不是旧的 skool vi),您可以执行以下操作:

:set ff=dos
:e!

您将能够编辑 PHP 文件,而无需使用所有难看的“^M”后缀。我相信它也会保存为 DOS“文本文件”格式。如果您以某种方式与(呃!)Windows 共享文件,这会很有用。

一点社论:为 MS-DOS 选择的两字节行尾标记肯定是 MS-DOS 强加给世界的最大问题之一,仅次于段、驱动器字母和“\”目录分隔符。该两字节标记仍然是“文本”和“二进制”之间差异的原因。哎呀。

相关内容