Linux 轉換換行符

hai503發表於2022-10-09

將Windows下編寫的一個txt檔案在Linux下開啟的時候發現每行行末都會多出^M,而將Linux編寫的一個txt檔案在Windows下開啟時發現所有的內容都在一行顯示,原本在Linux下是分了行的,為什麼會出現這種現象呢?其實這與windows和Linux對換行符的標誌不一樣而已。


在介紹兩者系統的換行符之前,先介紹下回車與換行的概念。


回車:CR,在文字中顯示為^M,在字串中對應為‘\r‘,r表示return;


換行:LF,在文字中顯示為$,在字串中對應為‘\n‘,n表示next。


Windows中斷行字元


Windows覺得換行應該要做兩件事:第一是要將讀寫針頭跑到下一行(換行);第二則是要在下一行從頭開始讀寫(回車),所以windows一直都是用 CR+LF表示換行的意思,字元為‘\r\n‘。


Linux中的斷行字元


早起的Unix閒用兩個字元(CR+LF)表示表示換行麻煩,就只採用後者LF(mac系統則獨樹一幟,採用前者CR表示換行符)。所以Linux採用的換行字元為‘\n‘。


總結:Windows中的斷行字元為‘\r\n‘,Linux中的斷行字元為‘\n‘,mac的斷行字元為‘\r‘。


既然Linux和Windows的斷行字元不一致,那麼問題就來了。兩者在相互讀取問題的時候,則會出現向本文開頭那樣的問題:Linux系統讀windows系統下編寫的txt檔案時,會在每行的末尾多一個^M(即多了‘\r‘);而windows系統下讀取Linux下編寫的txt檔案時,所有的內容都在同一行(因為缺少\r)。


在Linux下提供了一組命令,來相互轉化windows後Linux下的檔案.


dos2UNIX命令:將Windows檔案-->Linux檔案;


UNIX2dos命令:將Linux檔案--->Windows檔案;


兩個引數:


-k:(keep)保留原來檔案的最近修改時間引數,即本次轉化不算修改內容,mtime不變;


-n 舊檔名 新檔名:(new)保留舊檔案,將轉化後的檔案輸出到新檔案。


Notice:在Linux系統下讀取Windows檔案時,一定要先採用dos2UNIX命令轉化下;將Linux下編寫的檔案傳給Windows檔案時,一定要先用UNIX2dos轉化下。


原文:http://blog.csdn.net/jxh_123/article/details/26220619

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12707874/viewspace-2917364/,如需轉載,請註明出處,否則將追究法律責任。

相關文章