1. 程式人生 > >文字的兩種格式---dos和unix

文字的兩種格式---dos和unix

本文雖然題目是這樣寫的,但是並不僅僅有這兩種.至少我還知道另外一種,mac格式.不過本文只討論這兩種,另外一種可參考這兩種做出處理.

今天看了一個指令碼,完全都沒有問題,但是就是執行不過去.總是提示    syntax error near unexpected token `$'\r''   令人百思不得其解.其實看了字面的意思也能大致明白錯誤的原因.但是不知道解決的辦法.幸好有度娘.

其實問題的根源作於文字格式,在我一直糾結的過程中卻忽略掉了一個重要的問題.

dos文字格式  :   換行是\r\n

unix文字格式  :  換行是\n

也就是說,這個文字其實是dos格式的.糾結了半個消失這個細節.實在慚愧.那麼怎麼做才能瞬間知道一個文字的格式呢.

僅僅說一下在linux下的做法.當然可能考慮的還不是很全面,有不一樣的答案的同學,可以補充,在此謝謝.

1. cat -A 檔名   -A選項的意思是把所有的可列印和不可列印的字元都想方設法的打印出來.如果發現末尾有個^M.那就說明這是個dos格式的文字.

2. 用vim開啟,然後在底行的模式下(即冒號模式)執行set fileformat , 就可以檢視這個文本當前的格式了.

3. 還有一種方式,vim可能預設都可以正常顯示dos和unix,不會讓使用者看到不該看的.那麼我們可以在冒號模式下set fileformats=unix , 然後再在冒號模式下執行edit(作用即為重新整理).此時如果每一行末尾都出現了^M,那麼說明檔案格式為dos的.

現在我們知道怎麼去鑑別格式問題了.那麼怎麼去修改呢.網上給出了一個比較複雜的方式

1. sed -i s/^M//g   這個命令列不行呢,沒有問題,只是千萬別直接敲shift+6 shift+m.這樣是不對的,正確的做法是ctrl+v ctrl+m .只有這樣執行才能得到想要的結果.-i的意思就是直接替換原文.

2. dos2unix  偷懶可以用這種方式.一個命令直接搞定.不需要去了解sed也不需要去判斷什麼文字格式,我管你什麼格式.

3. 冒號模式下執行set fileformat=unix 也可以搞定.

4. 很多人說可以在冒號的模式下使用% s/^M//g,但是其實則是不行的,這個生效的前提是當前vim的fileformat是unix,如果是dos就不可以.前面的^M同1的鍵入方式.

再執行指令碼,ok.

可能上面的總結並沒有那麼全面.不過對於使用而言,已經足夠了.