Linux/Mac/Windows分行符號及對'\r'和'\n'的不同處理__Linux

來源:互聯網
上載者:User

分行符號‘\n’和斷行符號符‘\r’

顧名思義,分行符號就是另起一行,斷行符號符就是回到一行的開頭,所以我們平時編寫檔案的斷行符號符應該確切來說叫做斷行符號分行符號  

'\n' 10(0x0a)    換行(newline)
'\r' 13(0x0d)    斷行符號(return)


也可以表示為'\x0a'和'\x0d'.(16進位)

在windows系統下,斷行符號分行符號號是"\r\n".但是在Linux等系統下是沒有"\r"符號的。

在解析文本或其他格式的檔案內容時,常常要碰到判定斷行符號換行的地方,這個時候就要注意既要判定"\r\n"又要判定"\n"。

寫程式時可能得到一行,將其進行trim掉'\r',這樣能得到你所需要的string了。

=============================================== 【注/掌握:xqzhang2015】

1. 寫程式時,代碼裡面都是'\n'表示換行。

2. 對於檔案裡的換行,

(1)Windows系統裡,檔案每行結尾是"<斷行符號><換行>""\r\n"

(2)Mac系統裡,       檔案每行結尾是"<斷行符號>",即'\r'

(3)Unix系統裡,      檔案每行結尾是"<換行>",即'\n'

所以,用'\n'作為作為分行符號的檔案,用Windows的記事本開啟時 會沒有換行;

而用"\r\n"作為分行符號的檔案(windows檔案),用Linux或mac的vim開啟時 會將\r顯示成^M。

Mac的zsh中,採用\n作為分行符號,遇到\r將會被解釋為斷行符號符,即移動到該行的行首,然後繼續執行代碼。


附問題X-1:

【將mac或者unix系統裡vim顯示^M的替換為正常分行符號的問題】

在Linux中執行.sh指令碼,異常/bin/sh^M: bad interpreter: No such file or directory。 

分析:這是不同系統編碼格式引起的:在windows系統中編輯的.sh檔案可能有不可見字元,所以在Linux系統下執行會報以上異常資訊。 

解決:

1)在windows下轉換: 

利用一些編輯器如UltraEdit或EditPlus等工具先將指令碼編碼轉換,再放到Linux中執行。轉換方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。 

2)也可在Linux中轉換: 

首先要確保檔案有可執行許可權 #sh>chmod a+x filename 

然後修改檔案格式 #sh>vi filename 

利用如下命令查看檔案格式 :set ff 或 :set fileformat 

可以看到如下資訊 fileformat=dos 或 fileformat=unix 

利用如下命令修改檔案格式 :set ff=unix 或 :set fileformat=unix{set ff=unix 【fileformat】}

:wq (存檔退出) 

最後再執行檔案 #sh>./filename

what’s meaning of “configure: error: cannot run /bin/sh config/config.sub”

編一個東西的時候

執行./configure的時候出的錯

“configure: error: cannot run /bin/sh config/config.sub”

結果發現是系統沒有裝libtool的緣,然後再./configure則沒有這個問題了


附問題X-2:
【如何c++去除string字串末尾的\n,\r,\t,空格。】

#include <iostream>#include <string>using namespace std;/* 刪除字串行首/行尾的字元 */int main(void){string s = "\r\n\t 是\t這是隨便寫的一句話。\t\t ";size_t n = s.find_last_not_of(" \r\n\t");if(n != string::npos){s.erase( n + 1 , s.size() - n );}n = s.find_first_not_of ( " \r\n\t" );if(n != string::npos){s.erase( 0 , n );}cout << s << endl;}➜  test  g++ test.cpp➜  test  ./a.out     是這是隨便寫的一句話



給大家推薦一個網站:http://stackoverflow.com/


附問題X-3:
【mac vim處理dos分行符號^M】

今天用macvim開啟同事寫的一個檔案,代碼變成只有一行了,在原來的換行後面多了^M。

查到這個是因為dos分行符號在我這邊不支援,於是替換^M為mac這邊的分行符號,


在vim編輯模式下輸入:

:%s/^M/\r/g ;^M由ctrl+V+M獲得

這樣會替換掉所有的^M為換行,再儲存檔案就ok


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.