Windows & Unix 檔案格式之迷 < VI下刪除文字中的^M>
(1)問題提出
我們可能會遇到過這樣一些困惑:
A, 如何檢視一個檔案或資料流的二進位制格式(以十六進位制格式顯示)?
B,為什麼在 windows下編輯的 shell 指令碼在 Unix下不能執行?為什麼在 windows下編輯的 C 原始檔在有些 gcc 編譯器下不能編譯?
C,為什麼我在 vi 等編輯器下開啟一個文字檔案會包含 ^M,如何把它去掉?為什麼我在 windows 上用記事本開啟 unix上的檔案,檔案都不換行?
(2)分析與方案
A,如何檢視一個檔案的二進位制格式(以十六進位制格式顯示)?
方法一:在 UtraEdit 使用 Ctrl + H 切換到十六進位制編輯模式。** 注意 ** :此方法一有缺陷,它會將行末的單個"換行符"顯示成 "回車" + "換行" 兩個字元。
方法二:使用檔案或流的二進位制檢視工具 fbin。
B,為什麼在 windows下編輯的 shell 指令碼在 Unix下不能執行?為什麼在 windows下編輯的 C 原始檔在有些 gcc 編譯器下不能編譯?
原因分析:unix 的 shell 指令碼不能識別 "回車符" (即:CR,'r'),Windows 檔案格式換行時,總是以 "回車" + "換行" ,導致 unix 下的 shell 無法正常解釋。解決方法:就是把 windows 格式的中的 "回車" 符刪除。
方法一:使用 vi 開啟原始檔,把 'rn' 替換成 'n' ;** 缺點 ** :不適合大量檔案的批次作業。
方法二:使用 UtraEdit 把 Windows 格式的檔案轉換成 Unix 格式。檔案-->轉換-->Unix轉DOS;** 缺點 ** :不適合大量檔案的批次作業。
方法三:Unix 下的 dos2unix 命令,如 $ dos2unix -k xx.c;** 缺點 ** :此方法有一致命缺陷,它會改變原來的檔案屬性,如一個可執行 shell 指令碼的可執行屬性及其它屬性,轉換後都將會丟掉;** 優點 ** :適合大量普通檔案本檔案的批次作業。
方法四: win2unix (windows,unix 均可使用),功能類似 dos2unix,如 win2unx xx.c;** 優點** :克服了 dos2unix 的所有缺點,它能保留原始檔的任何屬性。還適合大量檔案的批次作業。
C,為什麼我在vi 等編器下開啟一個文字檔案會包含^M,如何把它去掉? 為什麼我在windows上用記事本開啟unix上的檔案,檔案都不換行?
原因分析:要解決這個問題,必先弄清 unix 與 windows 文字檔案的差異。如下:
1) 磁碟中 Windows 文字檔案總是以 "回車" + "換行"的形式進行換行的。
2) 磁碟中 Unix 格式的文字檔案,總是以"換行符"(即:LF,'n') 換行,而非 "回車換行符"。(Unix 規定:unix 文字檔案儲存到磁碟時,總是自動把 "回車換行符" 轉換成 "回車符" 儲存,輸出到終端時由終端自動將將 "回車符" 轉換成 "回車換行符" 輸出)
** 結論 1 **:這樣在 windows 的記事本中開啟 Unix 格式的檔案時,因為檔案中沒有 'r',所以無法正常顯示換行,結果就會把所有的內容顯示在同一行中。
** 結論 2 **:UtraEdit 等工具會自動檢測檔案中是否包含'r',當檢查行末缺少'r'時,一般它會提示要求進行Unix 到Windows 格式的轉換(相信都遇到這個提示資訊)。
** 結論 3 **:UtraEdit 和 vi 等工具,在儲存檔案時會自動依照檔案原來的格式進行儲存。即:如開啟的如是 windows 格式它會把檔案依然按 windows 格式儲存(不進行自動轉換);如開啟的如是unix 格式它會把檔案依然按 unix 格式儲存(不進行自動轉換)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66634/viewspace-1058243/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- vim刪除文字檔案中末行^M
- 批量刪除檔案中的^M
- vi 中將 Windows 文字檔案中的 ^M (回車換行)全部替換掉Windows
- windows 下刪除.svn檔案Windows
- windows文字檔案格式?Windows
- windows下刪除過期的檔案Windows
- Windows & Unix 檔案格式之迷, 空格、回車換行、tab 轉換及其相關工具(轉載)Windows
- 如何在 Unix 和 DOS 格式之間轉換文字檔案
- Windows下批次刪除N天前的檔案Windows
- 在WINDOWS下刪除幾天前的檔案Windows
- 我使用過的Linux命令之dos2unix - 將DOS格式文字檔案轉換成UNIX格式Linux
- UNIX下檔案的刪除與回收-“ rm”煩惱的解決(轉)
- windows 下 檔案內容清理且不刪除-拾億Windows
- [python]如何刪除目錄下指定格式的檔案Python
- 在linux及unix系統下批次刪除oracle檔案LinuxOracle
- windows10中的windows的系統舊檔案如何刪除Windows
- 【轉載】windows下刪除指定日期前的檔案Windows
- windows 7下刪除檔案開啟型別的方法Windows型別
- windows.old可以刪除嗎?windows.old檔案的刪除方法Windows
- Linux下批量刪除空檔案或者刪除指定大小的檔案Linux
- shell檢測檔案是windows格式還是unixWindows
- Windows forfiles(刪除歷史檔案)Windows
- unix下,vi開啟檔案是提示“未知的終端型別”型別
- 刪除Repository中的檔案
- 刪除檔案中的數字
- windows刪除檔案的批處理操作Windows
- Linux下刪除昨天的檔案Linux
- SCO UNIX下的反刪除(undelete)(轉)delete
- DOS/Windows和Linux/Unix間檔案格式轉換WindowsLinux
- 去掉linux文字檔案中的 ^M 符號Linux符號
- 刪除所有格式不符合的檔案(轉)
- Windows 10刪除備份檔案方法Windows
- 用C++程式刪除文字檔案中以“//”開頭的行(轉)C++
- 如何永久刪除Mac中的檔案?Mac
- 檔案的刪除
- linux下rm命令刪除檔名中包含特殊字元的檔案Linux字元
- 文字檔案的編碼格式
- iOS開發中利用AFNetworking下載大檔案以及下載檔案的刪除iOS