‘壹’ 计算机中的换行符、回车符、\n、\r、\n\r 怎么区分啊
' '是回车,前者使光标到行首,(carriage return)
' '是换行,后者使光标下移一格,(line feed)
是回车,return
是换行,newline
对于换行这个动作,unix下一般只有一个0x0A表示换行(" "),windows下一般都是0x0D和0x0A两个字符(" "),苹果机(MAC OS系统)则采用回车符CR表示下一行( )Unix系统里,每行结尾只有“<换行>”,即“ ”;Windows系统里面,每行结尾是“<回车><换行>”,即“ ”;Mac系统里,每行结尾是“<回车>”,即“ ”。
windows采用回车+换行CR/LF表示下一行,即^M$($不是换行符的表示,换行符没有表示出来,$是文本结束EOF的表示)
回车 (
) 本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR,即Carriage Return;
换行 ( ) 本义是光标往下一行(不一定到下一行行首),n的英文newline,控制字符可以写成LF,即Line Feed。在不同的操作系统这几个字符表现不同,比如在WIN系统下,这两个字符就是表现的本义,在UNIX类系统,换行 就表现为光标下一行并回到行首,在MAC上, 就表现为回到本行开头并往下一行,至于ENTER键的定义是与操作系统有关的。
关于“回车键”的来历,还得从机械英文打字机说起。在机械英文打字机上,有一个部件叫“字车”,每打一个字符(原为单词,但是个人觉得这里应该是字符),“字车”就前进一格。当打满一行字符后,打字者就得推动“字车”到起始位置,这时打字机会有两个动作响应:一是“字车”被归位,二是滚筒上卷一行,以便开始输入下一行,这个推动“字车”的动作叫“回车”。后来,在电动英文打字机上,人们增加了一个直接起“回车”作用的键。这个新增的键就被称为“回车键”。
在电脑键盘上,“回车键”上曾经使用过“CR”、“RETURN”的字样,后来才统一确定为“Enter”。
‘贰’ Linux /r /n
CR :Carriage Return,对应ASCII中转义字符\r ,0x0D(asc码是13) 指的是“回车” \r是把光标置于本行行首
LF :Linefeed,对应ASCII中转义字符\n ,0x0A(asc码是10) 指的是“换行” \n是把光标置于下一行的同一列
CRLF:Carriage Return & Linefeed,\r\n , 0x0D + 0x0A ,指的是回车换行 \r\n把光标置滑野于下一行行首
^M的原因 : ^M 注意要用 Ctrl + V Ctrl + M 来输入
Dos、Windows 格式的文件,用 0D 0A (CR+LF)作为换行符,而Unix 的则是以0A(LF) 作为换行符.所以dos 底下的文本文件到了unix的话,换行符就会多出来一个 0D(CR) 显示为 ^M,在linux中vim中无法显示\r
因为ascii中对应的不是linux中的标准acsii字符,其实困胡其对应的ASCII码十进制形式是: 13 (无显示形式);对应的八进制形式 15 (显示为^M)从二进制层面来理解,即可以删除换行符前面对应的字符字节(我瞎编的,应该对的),在字符层面直接删除^M这个字节即可
方法1:
在命令模式下:输入:%s/^M//g 然后,回车即可替换
注,其中”^M”的输入,分别是“Ctrl+v”、“Ctrl+M”键生成的
方法2:
使用vi打开文本文件
vi dos.txt
命令模式下输入
:set fileformat=unix
:w
方法3:
使用信尺喊sed 工具
sed ’s/^M//’ filename > tmp_filename
方法4:
既然window下的回车符多了‘\r’,那么当然通过删除‘\r’ ,也可以实现:
tr -d ‘\r’
或者:
sed -i 's/\r//' startup.sh
window下默认是 \r\n
linux下是\n
unix下是\r
现在, 我们看看本文开头部分的问题。 假设有一个linux下的unix.txt文件, 那么, 它在文件中的换行标志是:\n, 现在把unix.txt拷贝靠Windows上, 那好啊, Windows那双犀利的眼神仿佛是在对unix.txt文件说: 别跟我整什么\n, 我只认识文件中的\r\n, 如果你这个unix.txt文件里面有\r\n, 那我就认为是换行符, 否则, 我不认你。 如此一来, Windows压根就找不到unix.txt中的\r\n, 所以, 对于Windows而言, 压根就没有发现unix.txt有任何换行, 所以, 我们从Windows上看到的unix.txt文件显示在一行里面。