共享文本文件时,请根据将要读取该文件的程序来选择换行符,而不仅仅是根据显示该文件的计算机。对于在 macOS、Linux 和现代开发工具之间传输的大多数文件,请使用 LF。当 Windows 专有工具或既有项目有明确要求时,请选择 CRLF。在 Mac 上,您可以在“终端”中使用内置命令转换已知文本文件,并将结果另存为单独的文件。
LF 和 CRLF 的含义
换行符(行尾标记)是表示一行结束的字符或字符序列。macOS 命令行工具使用 LF,即单个换行字符(line-feed)。Windows 文本文件通常使用 CRLF,即回车符(carriage return)后跟一个换行符。较旧的经典 Mac 文件可能会单独使用 CR,这是一种独立的、不太常见的格式。Apple 介绍了这些约定,并指出 CRLF 文件可能会在 Unix 命令行工具中引起意外行为,因为多余的回车符会保留在每行的末尾。Apple 跨平台脚本编写指南
作为一条实用规则,除非项目另有规定,否则对于将在 macOS、Linux 或跨平台代码项目中使用的脚本和纯文本文件,建议优先使用 LF。当接收应用程序或项目有明确要求时,请使用 CRLF。如果您不确定,请询问接收方或查阅项目说明;文件扩展名本身并不能说明需要哪种换行符。
转换前先选择格式
首先确定文件的后续用途。能在目标应用程序中正常打开并正常运行的文本文件可能不需要转换。一个看起来正常但在 shell 脚本或数据处理步骤中失败的文件可能包含 CRLF,从而留下隐藏的回车符,进而影响行匹配或字段解析。Apple 指出,即使内容在视觉上看起来正确无误,也可能会出现这些问题。Apple 关于行尾行为的说明
“文本编辑”(TextEdit)可以创建和编辑纯文本文件,但 Apple 当前的指南中并未说明在保存时提供选择 LF 还是 CRLF 的控制选项。其换行命令仅用于排版文档内容;并未被描述为文件换行符选择器。如果需要设定特定格式,请使用具有明确换行符选项的文本编辑器,或在“终端”中转换已知的纯文本文件。“文本编辑”使用手册、“文本编辑”的分隔控制
在“终端”中转换已知文本文件
请保持原文件完好无损:将转换后的内容写入另一个文件名,然后在共享之前打开或检查新文件。在“终端”中,将 input.txt 和 output.txt 更改为实际路径。对于已知使用 Windows CRLF 且 Mac 或 Unix 工具需要将其转为 LF 的文件,请运行:
tr -d '\r' < input.txt > output.txt
这将删除回车符,保留 LF 换行符。对于已知使用 LF 且接收方需要 Windows CRLF 的文件,请运行:
CR="$(printf '\r')"
sed "s/$/$CR/" < input.txt > output.txt
这会在每个换行符前添加一个回车符。Apple 记录了使用 tr 和 sed 进行的这些转换方法。Apple 的转换示例
仅当您确切知道源格式且文件为纯文本时才使用这些命令。转为 LF 的转换会删除所有 CR 字符,而不仅仅是与 LF 配对的 CR 字符;反向转换则假定输入文件使用的是 LF。对于混合格式文件、仅包含 CR 的旧版文件或内容中包含有实际意义的回车符的文件,这些简单命令更改的内容可能会超出您预期的行尾范围。切勿对二进制文件运行这些命令。如果文件格式不确定,或者保留编码和元数据非常重要,请使用合适的编辑器或转换工具,并先查阅其说明文档。
检查结果并发送正确的文件
在目标应用程序中打开输出文件,确认各行能够分开显示,且文件仍然包含预期的文本。保留原文件,直到接收方确认转换后的副本可用。发送转换后的输出文件而非原始文件,并在需要时在交付说明中注明预期的换行符格式——例如,“已使用 LF 换行符保存”。
最稳妥的选择是遵循接收工具或项目所指定的格式。在没有特殊要求的情况下,LF 是 Mac 工作流中顺理成章的首选;仅在目标环境有要求时才转换为 CRLF。
资料来源
Designing Scripts for Cross-Platform Deployment — Apple Developer
《文本编辑使用手册》 — Apple 支持
在 Mac 上的“文本编辑”中插入换行符、分段符和分页符 — Apple 支持