簡單的說,window文件換行是 “/r/n”, 而Linux文件的換行是 “/n”, 所以將文件從window 下直接複製到 Linux 和就有問題。 用vim 打開揮發現 ^M 的字符在每一行尾。
但是好多軟件,會直接去處理這些區別。 比如notepad++, 會打開文件如果發現是“/r” 或者是“/r/n” 都會顯示新行。 perforce 也對此有處理,比如先將文件從window下提交到perforce,然後再從perforce同步到Linux/Unix平臺下, perforce 會自動轉換“/r/n” 到“/n“;反之,文件從Linux提交到perforce, 在同步到Windows, 這是perforce把“/n” 轉換爲“/r/n”。
因爲這些軟件處理不同平臺下的回車換行不同,所以我們很少注意到。 但是有時候問題就出現在這看不見的回車換行符裏面。那麼怎麼檢查?
用二進制去查看這些文件,可以方便查看不用。 比如: vim 下 %!xdd 打開查看。
下面一個查看二進制的例子來源於http://www.cnblogs.com/killkill/archive/2010/06/23/1763785.html
首先創建一個二進制文件:
1 |
[oracle@logserver
tmp]$ echo -n
"ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz" >
test .bin
|
2 |
[oracle@logserver
tmp]$ cat test .bin
|
3 |
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz[oracle@logserver tmp]$ |
注意echo 一定要跟上 -n 選項,否則會被自動加上一個換行行,再用vim打開 test.bin
1 |
[oracle@logserver
tmp]$ vim -b test .bin |
vim 的 -b 選項是告訴 vim 打開的是一個二進制文件,不指定的話,會在後面加上 0x0a ,即一個換行符。
在命令模式下鍵入:
1 |
:%!xxd |
如果 vim 後面沒有加 -b 選項就會出現可惡的 0x0a:
如果有 -b 選項就不會有這種情況:
然後進入編輯模式改,改就是了,我將A、B對應的41、42改成61、62,將a、b對應的61、62改成41、42。
回到命令模式輸入:
1 |
:%!xxd
-r |
此時可以發現AB和ab的位置互換了。
最後在命令模式中輸入 :wq 保存退出即可。
瞭解這些區別,用適當的工具去查看,這樣可以快速排除或者定位問題。