『壹』 計算機中的換行符、回車符、\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文件顯示在一行裡面。