天天看點

DOS檔案轉換成UNIX檔案格式詳解

轉:DOS檔案轉換成UNIX檔案格式詳解 

由windows平台遷移到unix系統下容易引發的問題:Linux執行腳本卻提示No such file or directory

dos格式檔案傳輸到unix系統時,會在每行的結尾多一個^M,當然也有可能看不到,但是在vi的時候,會在下面顯示此檔案的格式,比如 "dos.txt" [dos] 120L, 2532C 字樣,表示是一個[dos]格式檔案,如果是MAC系統的,會顯示[MAC],因為檔案格式的原因有時會導緻我們的unix程式,或者shell程式出現錯誤,那麼需要把這些dos檔案格式轉換成unix格式,方法是

    vi  dos.txt        

    :set fileformat=unix

    :w                

  這樣檔案就轉換成unix格式檔案了, 一般在windows機器上編寫好了檔案傳到unix下就可能會出現這樣的情況.

  用指令:set ff?  可以看到dos或unix的字樣. 

  用:set ff=unix把它強制為unix格式,也可以用sed 這樣的工具來做:

  sed 's/^M//' filename > tmp_filename

  其中^M是同時Ctrl+V+M按出來的,表示回車。

其它“怪招”:

1. 使用vi

vi dos_file.txt

:%s/^M//g

其中^M 必須是同時按 Ctrl+V+M ,表示回車。不是直接輸入 ^M ,那沒有用的, :-) 。

2. 使用tr

指令:tr -d "\015" dos_file.txt

3. 使用perl

cat dos_file.txt | perl -pe '~s/\r//g' > dos_file.txt

【VIM】DOS、Mac 和 Unix 檔案

http://vimcdoc.sourceforge.net/doc/usr_23.html

很久以前,老式的電傳打字機使用兩個字元來另起新行。一個字元把滑動架移回首位 (稱

為回車,),另一個字元把紙上移一行 (稱為換行,)。

   當計算機問世以後,存儲器曾經非常昂貴。有些人就認定沒必要用兩個字元來表示行

尾。UNIX 開發者決定他們可以用 一個字元來表示行尾。Apple 開發者規定

了用 。開發 MS-DOS (以及微軟視窗) 的那些家夥則決定沿用老式的 。

   那意味着,如果你試圖把一個檔案從一種系統移到另一種系統,那麼你就有換行符方

面的麻煩。Vim 編輯器自動識别不同檔案格式,并且不勞你操心就把事情給辦妥了。

   選項 'fileformats' 包含各種各樣的格式,Vim 會在編輯一個新檔案之初嘗試該選項

定義的各種格式。例如,下面這個指令告訴 Vim 先嘗試用 UNIX 格式,其次,嘗試

MS-DOS 格式:

        :set fileformats=unix,dos

編輯一個檔案時,你将注意到 Vim 給出的資訊消息報中包括檔案所用的格式。如果你編

輯的是本地格式檔案 (你編輯的檔案格式和所用系統一緻),你就不會看到任何格式名。

是以在 Unix 系統上編輯一個 Unix 格式檔案不會産生任何關于格式的資訊。但你若編輯

一個 dos 檔案,Vim 将這樣通知你:

        "/tmp/test" [dos] 3L,71C

如果是 Mac 檔案,你會看到 "[mac]"。

   探測到的檔案格式會被存入 'fileformat' 選項。執行下面這個指令可以顯示你目前

使用的檔案格式:

        :set fileformat?

Vim 能使用的三種格式如下:

        unix            

        dos             

        mac            

使 用 MAC 格 式

在 Unix 上, 用于分行。但 字元混在文本行中間也非罕見。這種情況碰巧經

常發生在 Vi (和 Vim) 腳本内。

   在采用 作為換行符的 Macintosh 上, 字元也有可能混在文本行中間。

   結果,很難 100% 肯定一個同時包含 和 的檔案究竟是 Mac 還是 Unix 格

式。是以,Vim 假設你一般不會在 Unix 上編輯一個 Mac 檔案,是以幹脆對這種檔案格

式不作檢查。果真要檢查此種格式,就把 "mac" 加入 'fileformats':

        :set fileformats+=mac

然後 Vim 就會猜測檔案格式。要當心, Vim 可能會猜錯的。

強 制 格 式

如果你用往日美好的 Vi 來嘗試編輯一個采用 MS-DOS 格式的檔案,你将會發現每一行的

末尾有個 ^M 字元。(^M 就是 )。而 Vim 的自動探測功能就避免了這個問題。莫非

你确實要按那個樣子來編輯這個檔案嗎?那麼你需要強制 Vim 忽略檔案格式而使用你指

定的格式:

        :edit ++ff=unix file.txt

字元串 "++" 告訴 Vim 後面跟的是選項名,以取代其預設值。但僅作用于這一個指令。

"++ff" 用于 'fileformat' 選項。你也可以用 "++ff=mac" 或 "++ff=dos"。

   這樣用法并非适用于任意選項,目前 Vim 僅僅實作了 "++ff" 和 "++enc"。用全稱

"++fileformat" 和 "++encoding" 也行。

轉 換

你可以用 'fileformat' 選項把檔案從一種格式轉換為另一種。例如,假定你有個名為

README.TXT 的 MS-DOS 檔案,你要把它轉換成 UNIX 格式。首先編輯這個采用 MS-DOS

格式的檔案:

        vim README.TXT

Vim 将識别出那是一個 dos 格式檔案。現在把這個檔案的格式改為 UNIX:

        :set fileformat=unix

        :write

這個檔案就以 Unix 格式存盤了。