參考
阮一峯的網絡日誌/回車和換行
Windows和Linux 行尾符(EndOfLine)的區別
linux下刪除文本中所有空行的幾種方法
歷史
- “回車”:carriage return,簡寫爲CR,符號\r,原始含義爲把打印頭定位在左邊界(不下移)
- “換行”:line feed,簡寫爲LF,符號\n,原始含義爲把打印頭向下移一行(其實是把紙向上移一行)
在計算機還沒有出現之前,有一種叫做電傳打字機(Teletype Model 33)的玩意,每秒鐘可以打10個字符。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字符。要是在這0.2秒裏面,又有新的字符傳過來,那麼這個字符將丟失。
於是,研製人員想了個辦法解決這個問題,就是在每行後面加兩個表示結束的字符。一個叫做"回車",告訴打字機把打印頭定位在左邊界;另一個叫做"換行",告訴打字機把紙向上移一行。
這就是"換行"和"回車"的來歷,從它們的英語名字上也可以看出一二。
不同操作系統
- Unix系統裏,每行結尾只有"<換行>",即"\n"
- Windows系統裏面,每行結尾是"<回車><換行>",即"\r\n"
- Mac系統裏,每行結尾是"<回車>",即"\r",後來又改成和Unix系統一致了。
證據:看看pycharm中的小圖標(順便在編輯python代碼時注意這個點):
一個直接後果是,Unix/Mac系統下的文件在Windows裏打開的話,所有文字會變成一行;而Windows裏的文件在Unix/Mac下打開的話,在每行的結尾可能會多出一個^M符號。
證據:做個小實驗吧!
-
在ubuntu上建一個test.txt爲(vim打開)
-
拉到windows下,使用文本編輯器打開爲
使用notepad++打開的話爲(注意調整視圖:視圖->顯示符號->顯示所有字符)
-
在windows建一個文件test2.txt,用文本編輯器打開爲
使用notepad++打開爲
(這裏還多了LF空行!) -
移動到ubuntu上,使用vim打開爲
文檔格式轉化
-
在windows上,將unix文本轉化爲windows文本格式:
用test.txt做實驗,使用notepad++打開,然後選擇編輯->文檔格式轉換->轉爲Windows(CR LF) 顯示爲
-
在unix上,將windows文本文件轉化爲unxi格式
dos2unix test2.txt
可選方法: 使用sed來做這個事情:sed -i 's/.$//g' test2.txt
(刪除末尾符號)再用vim打開爲
空行還是在!再使用sed -i '/^\s*$/d' test2.txt
,再用vim打開就好了