Linux與Windows文本格式之間的轉化

 

  原理: linux

 

在Linux中,文本文件用"\n"表示回車換行,而Windows用"\r\n"表示回車換行。因此在Linux中使用Windows的文本文件經常會出現錯誤vim

 

 

由於裝了雙系統,因此有時一些文件在兩個系統之間共享,不過以前一直沒有很在乎這個問題.在windows系統中用Word或者Notepad++打開文件,在linux系統中一直用的是vim編輯器,不過昨天在命令行界面就只能用vi了..鬱悶!! 中文支持都是個頭痛的問題,在windows編輯過的文本文件每行末尾都會以^M以結尾...windows

 

 

----------------------------------------------------bash

Linux提供了兩種文本格式相互轉化的命令:dos2unix和unix2dos,dos2unix把"\r\n"轉化成"\n",unix2dos把"\n"轉化成"\r\n"。編輯器

 

 

Ubuntu 7.10中默認沒有dos2unix或者unix2doside

提示要安裝tofrodos這個包( Converts DOS <-> Unix text files, alias tofromdos )工具

$sudo apt-get install tofrodos測試

 

dos2unix --> 將windows文本文件轉化爲linux格式spa

unix2dos --> 將linux文本文件轉化爲windows格式命令行

  

用法:

man dos2unix

man unix2dos

 

 

----------------------------------------------------

使用linux系統中自帶的流文本編輯器sed

 

 

DOS/Windows和Linux/Unix的文件換行回車格式不一樣基於 DOS/Windows 的文本文件在每一行末尾有一個CR(回車)和LF(換行),而 UNIX 文本只有一個換行..

 

1. 把Dos/Windows下的文件移至Linux/Unix系統

 

雖然不少程序不在意 DOS/Windows 格式的 CR/LF 文本文件,可是有幾個程序卻在意 -- 最著名的是 bash,只要一遇到回車,它就會出問題。如下 sed 調用將把 DOS/Windows 格式的文本轉換成可信賴的 UNIX 格式:

$ sed -e 's/.$//' mydos.txt > myunix.txt

 

該腳本的工做原理很簡單:替代規則表達式與一行的最末字符匹配,而該字符剛好就是回車。咱們用空字符替換它,從而將其從輸出中完全刪除。若是使用該腳本並注意到已經刪除了輸出中每行的最末字符,那麼,您就指定了已是 UNIX 格式的文本文件。也就不必那樣作了!

 

2. 把Linux/UNIX 文本移至 Windows 系統,使用如下腳本執行必需的格式轉換:

$ sed -e 's/$/\r/' myunix.txt > mydos.txt

 

在該腳本中,'$' 規則表達式將與行的末尾匹配,而 '\r' 告訴 sed 在其以前插入一個回車。在換行以前插入回車,當即,每一行就以 CR/LF 結束。請注意,僅當使用 GNU sed 3.02.80 或之後的版本時,纔會用 CR 替換 '\r'。

 

 

----------------------------------------------------

聽說還能夠用vim來處理(未測試):

 

 

在 Vim 的命令模式中輸入 :%s/^M$//g 後,回車即會自動刪除該文件中的全部 ^M 字符

命令分析:

%指匹配整個文件, s是置換的意思, ^M 注意要用Ctrl + V和Ctrl + M來輸入,M後面的$表明匹配行尾的內容(用空格替換), 最後的g則表示每行中匹配到的內容都要置換

 

 

 

 

----------------------------------------------------

使用tr 命令實現:

1. 使用相似於這樣的表示法: tr abc xyz  ,它表示用字母「x」去替換出現的全部字母「a」,用字母「y」去替換全部字母「b」,用字母「z」去替換全部字母「c」。

2. tr a-z A-Z 將用對應的大寫字母來替換全部的小寫字母(例如,它將「no smoking」轉換成「NO SMOKING」)。

3. 當您在 vi 編輯器中想強調正在編輯的文本的某一部分時,使用這一特殊技巧很是方便。只要按一下 Escape 鍵,而後按 : 鍵,再輸入 2,4!tr 'a-z' 'A-Z' ,最後按一下 Return 鍵。如今,從第 2 行到第 4 行的字母就都轉換成了大寫字母。

4. 另外,當有人給您發送了一個在 Mac OS 或 DOS/Windows 機器上建立的文本文件時,您會發現 tr 很是有用。若是沒有將文件保存爲使用 UNIX 換行符來表示行結束這種格式,則須要將這樣的文件轉換成本機 UNIX 格式,不然一些命令實用程序不會正確地處理這些文件。Mac OS 的行尾以回車字符結束,許多文本處理工具將這樣的文件做爲一行來處理。爲了糾正這個問題,能夠用下列技巧:

   * Mac -> UNIX: tr '\r' '\n' < macfile > unixfile

   * UNIX -> Mac: tr '\n' '\r' < unixfile > macfile

 



 

----------------------------------------------------

Tips: 回車」(Carriage Return)和「換行」(Line Feed)這兩個概念的來歷和區別。           在計算機尚未出現以前,有一種叫作電傳打字機(Teletype Model 33,Linux/Unix下的tty概念也來自於此)的玩意,每秒鐘能夠打10個字符。可是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好能夠打兩個字符。要是在這0.2秒裏面,又有新的字符傳過來,那麼這個字符將丟失。          因而,研製人員想了個辦法解決這個問題,就是在每行後面加兩個表示結束的字符。一個叫作「回車」,告訴打字機把打印頭定位在左邊界;另外一個叫作「換行」,告訴打字機把紙向下移一行。這就是「換行」和「回車」的來歷,從它們的英語名字上也能夠看出一二。         後來,計算機發明瞭,這兩個概念也就被般到了計算機上。那時,存儲器很貴,一些科學家認爲在每行結尾加兩個字符太浪費了,加一個就能夠。因而,就出現了分歧。         Unix系統裏,每行結尾只有「<換行>」,即"\n";Windows系統裏面,每行結尾是「<換行><回車 >」,即「\n\r」;Mac系統裏,每行結尾是「<回車>」,即"\n";。一個直接後果是,Unix/Mac系統下的文件在 Windows裏打開的話,全部文字會變成一行;而Windows裏的文件在Unix/Mac下打開的話,在每行的結尾可能會多出一個^M符號。 
相關文章
相關標籤/搜索