|
|
1
1603
因为那是 how the POSIX standard defines a line
因此,不以换行符结尾的行不被视为实际行。这就是为什么有些程序在处理文件的最后一行时遇到问题,如果它不是换行终止的。
在终端仿真器上工作时,此指南至少有一个硬优势:所有Unix工具都希望使用此约定并使用它。例如,将文件与
并且,如前一个示例所示,在命令行上显示文件时(例如,通过
为了保持一致性,遵循此规则非常有帮助,否则在处理默认Unix工具时会导致额外的工作。
可解
但是你需要利用
或者,您需要引入一个特殊的哨兵字符来标记应该继续而不是终止的行。好吧,现在您遇到了与POSIX相同的情况,除了反转(换行符而不是换行符)。 现在,开始 系统(现在主要是Windows),这一点是没有意义的:文件通常不会以换行符结尾,例如,行的(非正式)定义可能是 通过换行符(注意重点)。这是完全正确的。然而,对于结构化数据(例如编程代码),它使解析变得更加复杂:这通常意味着必须重写解析器。如果最初编写解析器时考虑了POSIX定义,那么修改令牌流可能比修改解析器更容易——换句话说,在输入的末尾添加一个人工换行符。 |
|
|
2
291
每行应以换行符结尾,包括最后一行。如果文件的最后一行没有换行终止,某些程序在处理该行时会遇到问题。 不能 处理该文件,但因为
|
|
|
3
124
如果我们想成为POSIX纯粹主义者,我们将一行定义为:
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_206 不完整的行,如: 资料来源: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_195 文本文件格式为: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_397 字符串为:
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_396 从这一点,我们可以得出,只有在 遇到任何类型的问题都是如果我们处理一个概念 指一个文件或一个文件作为 (即 文本文件
例如:
从
JavaScript、HTML和CSS文件的含义是什么 文本 文件夹?
那我们还剩下什么?系统级工具。
这意味着可能出现的唯一问题是,工具努力使其功能符合POSIX的语义(例如,如中所示的行定义)
EOL存在的价值值得思考<换行符>: https://www.rfc-editor.org/old/EOLstory.txt 在工具轨道上,考虑到所有实际意图和目的,让我们考虑一下: 让我们使用一个没有EOL的文件。在编写本文时,本例中的文件是一个没有EOL的小型JavaScript。
正如其他人在这篇文章中提到的:如果你想
这个
现在我们了解了POSIX如何定义 线 ,此行为变得模棱两可,或者实际上不符合要求。 了解给定工具的用途和法规遵从性将有助于确定使用EOL结束文件的重要性。在C、C++、java(JARS)等中…一些标准将规定有效性的新行-JS、HTML和CSS不存在这样的标准。
例如,不使用
结论
故事的寓意是:在EOF中,工程师工具没有依赖EOL的弱点。 请随意发布应用于JS、HTML和CSS的用例,我们可以在其中检查跳过EOL如何产生不利影响。 |
|
|
4
64
例如,如果每一行都以行尾结束,这可以避免连接两个文本文件会使第一行的最后一行变成第二行的第一行。
which was not very appreciated
.
|
|
|
5
47
|
|
|
6
25
一个单独的用例:当您的文本文件受版本控制时(在本例中,特别是在git下,尽管它也适用于其他文件)。如果将内容添加到文件的末尾,则先前作为最后一行的行将被编辑为包含换行符。这意味着
|
|
|
7
23
|
|
|
8
20
多年来我一直在想这个问题。但我今天遇到了一个很好的理由。 设想一个文件,每行都有一条记录(例如:CSV文件)。电脑在文件末尾写记录。但它突然崩溃了。哎呀,最后一行完成了吗?(情况不太好) 但是如果我们总是终止最后一行,那么我们就会知道(只需检查最后一行是否终止)。否则,为了安全起见,我们可能每次都要丢弃最后一行。 |
|
|
9
19
这起源于使用简单终端的早期。换行符用于触发传输数据的“刷新”。 如今,不再需要换行符了。当然,如果新行不在那里,很多应用程序仍然有问题,但我会认为这些应用程序中存在bug。 但是,如果您有一个文本文件格式 要求 |
|
|
10
17
除了上述实际原因外,如果Unix的创始人(Thompson、Ritchie等)或他们的Multics前辈认识到使用行终止符而不是行分隔符有一个理论上的原因,我也不会感到惊讶:使用行终止符,可以对所有可能的行文件进行编码。使用行分隔符,零行文件和包含一个空行的文件之间没有区别;它们都被编码为一个包含零个字符的文件。 因此,原因是:
|
|
|
11
12
还有一个实际的编程问题,即文件末尾缺少换行符
只有
也就是说,做
|
|
12
11
可能只是一些解析代码期望它在那里。 我不确定我会认为这是一个“规则”,这肯定不是我信奉的东西。最明智的代码将知道如何逐行解析文本(包括编码)(任何行尾的选择),最后一行是否换行。 事实上,如果你以一个新行结束:在EOL和EOF之间(理论上)是否有一个空的最后一行?一个值得深思的人。。。 |
|
13
8
许多人都表达得很好,因为:
但这引出了下一个问题:
|
|
|
14
6
我们所做的只是:
该文件是在widows计算机中创建的,Windows脚本正在使用PowerShell命令处理该文件。一切都好。
由于JSON无效,它使其余进程失败。
|
|
|
15
4
因为这是最明智的选择。获取包含以下内容的文件,
哪里
这个文件有多少行?Windows说3,我们说3,POSIX(Linux)说文件被破坏了,因为应该有一个
不管怎样,你认为它的最后一行是什么?我想大家都同意这一点
那么,选择Windows的后果是什么呢?简单:不能说文件是由行组成的 为什么?尝试从上一个文件中提取最后一行并复制几次。。。你得到了什么?这:
因此
您必须说文本文件是行和行的交替
这真是太多了,对吧? 你想要另一个奇怪的结果吗?
你不觉得这很疯狂吗? POSIX选择的结果是什么?
严肃的
我的结论我支持POSIX对行的定义,原因如下:
|
|
|
16
3
然而,我相信这条规则是从需要换行符的C编译器派生出来的。正如在 âNo newline at end of fileâ compiler warning ,#include不会添加换行符。 |
|
|
17
2
|
|
|
18
-5
我个人喜欢源代码文件末尾的新行。
|
|
|
19
-7
在过去,我没有写那条新线。保存一个字符意味着通过14.4K调制解调器的速度更快。 稍后,我添加了该换行符,以便更容易使用shift+向下箭头选择最后一行。 |
|
|
sk123 · Shell脚本-如何在循环中显示变量名及其值 2 年前 |
|
|
sai · unix中使用python进行数据重组 2 年前 |
|
|
FangQ · 如何使用jq打印由制表符“\t”分隔的JSON数组元素 2 年前 |
|
|
ROHAN · 我想显示包含一个括号的行,包括它的开头或结尾 2 年前 |
|
Geomicro · 删除模式sed之间的逗号 2 年前 |