标题不是很具体,但我无法确定正确的关键词,因为我不确定这里发生了什么。出于同样的原因,我的问题可能有重复,因为 .如果是这样的话:抱歉!
我有一个通过平面文件接收数据的 Linux 应用程序。我不知道这些文件是如何生成的,但我可以毫无问题地阅读它们。这些都是短文件,每个文件只有一行。
出于测试目的,我尝试修改其中一个文件并将其重新注入(inject)到应用程序中。但是当我这样做时,我可以在日志中看到它在消息末尾添加了一个神秘的分页符(导致应用程序无法识别该消息)...
举例来说,假设我收到一个名为original 的平面文件,其中包含以下内容:
ABCDEF
我复制了这个文件并将其命名为copy。
- 如果我使用“diff”命令比较这两个文件,它会说它们是相同的(正如我所期望的那样)
- 如果我通过 Vi 打开 copy 然后退出而不更改也不保存任何内容,然后使用“diff”命令,它说它们是相同的(正如我所期望的那样)
- 如果我通过 Vi 打开复制,然后不做任何更改而保存它,然后使用“diff”命令,我有以下内容(我添加了布局目的的点):
diff original copy
1c1
< ABCDEF
\ No newline at end of file
---
.> ABCDEF
如果我比较两个文件的大小,我可以看到原始 是 71 字节,而 副本 是 72。
当我保存文件时,文件的格式似乎发生了变化。我首先想到了一个编码问题,所以我在 Vim 上使用“:set list”命令来查看不可见字符。但是对于这两个文件,我可以看到以下内容:
ABCDEF$
我已经找到了其他方法来做我的测试,但这个问题仍然困扰着我,我真的很想了解它。所以,我的两个问题是:
- 这里发生了什么?
- 如何在不创建这个神秘的分页符的情况下修改这样的文件?
感谢您的帮助!
最佳答案
默认情况下,Vim 会假设您编辑的文件以“换行”字符结尾。这是 UNIX 领域的正常行为。但是您的程序正在读取的"file"对我来说更像是“流”,因为它们不以换行符结尾。
为了确保那些"file"在写入时没有换行符,在写入之前设置以下选项:
:set binary noeol
参见 :help 'eol'
。
关于linux - 通过 Vim 保存平面文件向创建新行的文件添加一个不可见的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24306744/