DOS文件轉換成UNIX文件格式詳解

轉:DOS文件轉換成UNIX文件格式詳解 html

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

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 格式存盤了。
相關文章
相關標籤/搜索