作業系統 換行符區分

2021-08-20 14:28:44 字數 2076 閱讀 5414

windows,《回車換行》(carriage return and line feed) 「\n\r」 crlf

unix,《換行》(carriage return) 「\n」 cr

mac,「\r」

\r:回車,carriage return,表示使游標下移一格。

\n:換行,英文是new line,表示使游標到行首。

\r\n:表示回車換行。

1,文字顯示問題,windows 下的檔案在linux 下會產生 ^m 符號,而 linux 下建立編輯的檔案 在windows 下會顯示成一行;(edit plus 等軟體可以很好區分除外)

2,window 下寫的shell指令碼不能再linux下執行了(shell 直譯器對用換行符作為乙個命令的提交)

3,影響版本控制軟體呢的檢入檢出,(git對於工作空間和版本庫中換行符有轉換控制)產生一些無用的檔案差異(git diff),尤其在多人協作中,每個人設定的換行符模式不同。

3,有時產生莫名其妙的問題,如果找不到原因,應該懷疑下是不是換行符的問題;

windows -> unix:用unix 平台的命令工具

1、cat a.txt | tr -d 「^m」 > b.txt

2、cat a.txt | sed 『s/^m//g』

3、vim 中執行sed 命令替換 ( :^,$ s/^m//g ;or :s/\r//g; )

4、dos2unix 檔案 (適用與對資料夾所有檔案進行轉化)

unix ->windows

在window 平台適用 ultraedit 和 editplus 等工具的 可以設定換行模式進行自動轉化。

再或者在unix 平台中使用命令。

1、cat a.txt | sed 『s/\n/\r\n/g』

2、unix2dos 檔案 (適用與對資料夾所有檔案進行轉化)

ide 中像設定編碼一樣,強制在工程工作區間級別設定檔案換行為 linux 風格。

1、有利與使用git少出錯

2、有潔癖的想法是還能省\r 這乙個位元組的內容消耗

eclipse 設定

idea 設定

gitbash 中設定預設檢入檢出換行符為linux(\n)風格:(為了團隊更好的協作)

開啟自動換行

[a@b]$ git config --global core.autocrlf true

#簽出時將換行符轉換成crlf,籤入時轉換回 lf。 git config --global core.autocrlf true

#簽出時不轉換換行符,籤入時轉換回 lf git config --global core.autocrlf input

#簽出簽入均不轉換 git config --global core.autocrlf false

開啟安全換行
[a@b]$ git config --global core.safecrlf true

解釋:如果你把換行符搞亂了,在乙個檔案中既包含windows風格的換行符也包含unix風格換行符,那麼 safecrlf 就可以發揮作用了:

#拒絕提交包含混合換行符的檔案 git config --global core.safecrlf true

#允許提交包含混合換行符的檔案 git config --global core.safecrlf false

#提交包含混合換行符的檔案時候給出警示 git config --global core.safecrlf warn

shell 不同作業系統對換行符的處理

在windows系統上用notpad 編寫linux shell指令碼,當傳送到linux上執行時一直報錯說 syntax error unexpected end of file 原因 windows 的 dos下的文字檔案是以 r n作為斷行標誌的,表示成十六進製制就是0d 0a。而unix下的...

Linux換行符和Windows換行符的區別與轉換

windows為乙個回車 r cr或 m 和乙個換行 n nl或lf 括號內是其它顯示方法 linux為乙個換行 n mac為乙個回車 r 檢視檔案是否含有windows換行符 windows notepad 檢視 顯示所有符號 linux file test.txt test.txt ascii ...

換行符問題

今天,我總算搞清楚 回車 carriage return 和 換行 line feed 這兩個概念的來歷和區別了。在計算機還沒有出現之前,有一種叫做電傳打字機 teletype model 33 的玩意,每秒鐘可以打10個字元。但是它有乙個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個...