LINUX终点线

时间:2012-07-17 10:34:58

标签: python linux ascii vi

我正在从LINUX(Debian)读取一个ASCII文件到Python CGI脚本,在那里通过网页编辑然后保存,

如果我使用图形文本编辑器,则编辑和未编辑的文件显示相同且格式正确。

使用vi编辑的文件包含ctrl M作为EOL标记,所有行都合并为一行,但未编辑的文件格式正确。在vi中使用:set List查看控制字符,编辑后的文件保持如上所述,但在未编辑的文件$中显示为EOL标记。 我知道LINUX EOL是ctrl 0x0D但是什么是$

为什么$格式正确且ctrl M没有?

2 个答案:

答案 0 :(得分:1)

$vi显示(在某些模式下)。它不在文件内容中。您可以使用od -cx yourfile来检查。

答案 1 :(得分:1)

在vi中,$与EOL角色匹配。您可以使用:set fileformat=XXX更改EOL字符,如here所示。我不是100%确定如果你改变文件类型,$将匹配新的EOL,因为我还没有尝试过。但该链接包含的信息对于答案的其余部分将非常方便。

^M(CTRL-M)字符为roughly equivalent to a carriage return

从你的说法来看,听起来好像图形文本编辑器正在使用类似Mac的EOL,它只是一个没有换行符的回车符(CR)。因此^M个字符和所有行汇总成一个。如果它是使用Windows / DOS EOL,它是回车加换行符(CR + LF),我会期望^M字符,但它上面的每一行都是独立的。

This answer解释了如何摆脱^M个字符。我不会使用dos2unix,因为我不确定如何只处理CR而不是CR + LF。