”回车”(carriage return)和”换行”(line feed)这两个概念的来历和区别
这两种概念来源于一种叫做电传打字机(Teletype Model 33)的机器,”回车”意思是告诉打字机把打印头定位在左边界;”换行”意思是告诉打字机把纸向下移一行。
\r (Carriage Return):将光标移动到行首而不前进到下一行
\n (Line Feed):将光标向下移动到下一行,而不返回到该行的开头。在 *nix 环境上 \n 意味着移动到行首。
\r\n (End Of Line): \r 和 \n的结合
Unix/Linux系统里,每行结尾只有<换行>,即\n
Windows系统里面,每行结尾是<回车><换行>,即\r\n;
Mac系统里,每行结尾是<回车>。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
以 CRLF 作为换行符的文本文件经常被称作 DOS 格式文件, 而以 LF 作为换行符文本文件, 被称作 UNIX 格式文件
如果进行跨平台的协同工作, 特别是使用 git 进行代码版本管理, 最好统一换行符, 建议使用 LF(即\n) 作为换行符
使用 file 命令查看 dos 格式文件:
$ file test.log
test.log: Unicode text, UTF-8 text, with CRLF line terminators
使用 file 命令查看 unix 格式文件:
$ file test.log
test.log: Unicode text, UTF-8 text
dos 格式文件转换成 Unix 格式文件, 就是把 CRLF 替换为 LF; unix 格式文件转换成 dos 格式文件, 就是把 LF 替换为 CRLF
dos2unix 和 unix2dos