原理: 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
----------------------------------------------------