Linux、Windows和Mac中的换⾏符对⽐
原⽂地址:
linux换行按哪个键
⼀、前⾔
经常使⽤ Window、Linux 等不同操作系统的开发者,在处理⽂本的时候,基本都会遇到不同系统,出现换⾏格式不⼀致的问题,原因就出在不同的系统,定义了不同的换⾏符。
⼆、Linux、Windows 和 Mac 中的换⾏符对⽐
对于换⾏这个动作,Unix下⼀般只有⼀个 0x0A 表⽰换⾏("\n"),Windows 下⼀般都是 0x0D 和 0x0A 两个字符,即 0D0A("\r\n"),苹果机(MAC OS系统)则采⽤回车符 CR 表⽰下⼀⾏("\r")。
Unix 系统中:每⾏结尾只有 "<;换⾏>",即 "\n";
Windows 系统中:每⾏结尾是 "<;回车><;换⾏>",即 "\r\n";
Mac 系统中:每⾏结尾是 "<;回车>",即 "\r"。
不同系统所定义的换⾏格式不同,导致的直接后果是,Unix/Mac 系统下的⽂件在 Windows ⾥打开的话,
所有⽂字会变成⼀⾏;⽽Windows ⾥的⽂件在 Unix/Linux 下打开的话,在每⾏的结尾会多车⼀个 ^M 字符。
Dos 和 windows 采⽤ "回车+换⾏",即 "CR + LF" 表⽰下⼀⾏,即敲⼀下回车键,相当于同时执⾏了 "回车+换⾏",即^M$($ 不是换⾏符的表⽰,换⾏符没有表⽰出来,$ 是⽂本结束 EOF 的表⽰)。
⽽ UNIX/Linux 采⽤ "换⾏符",即 "LF" 表⽰下⼀⾏,即 "\n";
苹果机(MAC OS系统)则采⽤ "回车符",即 "CR" 表⽰下⼀⾏,即 "\r";
CR ⽤符号 "\r" 表⽰,⼗进制 ASCII 代码是 13,⼗六进制代码为0x0D;
LF 使⽤ "\n"符号表⽰,ASCII代码是 10,⼗六制为0x0A。所以 Windows 平台上换⾏在⽂本⽂件中是使⽤ "0D0A" 两个字节表⽰,⽽UNIX/Linux 和苹果平台上换⾏则分别是使⽤0A和0D⼀个字节表⽰。
由于 DOS 风格的换⾏使⽤ "\r\n",如果把这样的⽂件上传到 Unix/Linux,有些版本的 vi 不能识别 "\r",所以 vi 显⽰时在⾏尾会出现 ^M 出来,但是有些就能识别 \r\n,正常显⽰回车换⾏。
附部分 ASCII 码对照表:
三、使⽤ Notepad++ 查看回车和换⾏符并相互转换
Notepad++ 中可以设置 Windows、Unix 和 Mac三种⾏尾换⾏符格式及其之间的转换,如下:
默认不显⽰回车及换⾏符:
1)设置 Notepad++ 显⽰换⾏符,这样才能看到效果,视图 -> 显⽰符号 -> 显⽰⾏尾符,如果是英⽂版的 Notepad++,则应该是 View -> Show Symbol -> Show End of Line;
2)设置⾏尾符格式:编辑 ->  档案格式转换 ->(可选 Windows、Unix 和 Mac中的⼀种),如果是英⽂版的 Notepad++,则应该是 Edit -> EOL Conversion -> Windows Format、Unix/OSX Format、Old Mac Format。
四、Linux 中去除 DOS/Windows ⽂档中出现的 "^$"
有时候将 Windows 中编辑好的⽂本上传到 LInux 服务器中使⽤,此时就需要将 Windows 中的 "^$" 去除,如下:
[root@ryan linux]#
-rw-r--r-- 1 root root 21 Apr 2022:
[root@ryan linux]#
aaa bbbb
cccc
123
使⽤cat -A选项查看⽂本所有的字符,如下:
[root@ryan linux]# cat -
aaa bbbb^M$
cccc^M$
123^M$
或者使⽤cat -v选项显⽰出⾮打印字符,如下:
[root@ryan linux]# cat -
aaa bbbb^M
cccc^M
123^M
去除 "^M" 符号,如下:
[root@ryan linux]# cat - | tr -d '^M'  >
[root@ryan linux]# cat -
aaa bbbb$
cccc$
123$
或者使⽤其 ASCII 码,如下:
[root@ryan linux]# |tr -d '\015' >
[root@ryan linux]# cat -
aaa bbbb$
cccc$
123$
需要注意:⼋进制下,^m 是 015;^Z 是 032;tab 是 011;^是136。
此处复习⼀下进制的相关知识,如下:
在C语⾔⾥,整数有三种表⽰形式:⼗进制,⼋进制,⼗六进制。
其中以数字0开头,由 0~7 组成的数是⼋进制。以 0X 或 0x 开头,由 0~9,A~F 或 a~f 组成是⼗六进制。除表⽰正负的符号外,以 1~9 开头,由 0~9 组成是⼗进制。
1)⼗进制:除表⽰正负的符号外,以 1~9 开头,由0~9组成。如:128,+234,-278。
2)⼋进制:以 0 开头,由 0~7组成的数。如:0126,050000。
3)⼗六进制:以 0X 或 0x 开头,由 0~9,A~F 或 a~f  组成。如:0x12A,0x5a000。