Windows Unix 檔案格式之迷

2021-06-02 15:01:23 字數 1782 閱讀 3346

(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 開啟原始檔,把 '\r\n' 替換成 '\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 格式儲存(不進行自動轉換)。

參考原文:

Oracle 控制檔案格式ctl檔案格式

options skip 1,errors 10 load data characterset zhs16gbk infile into table table name truncate fields terminated by optionally enclosed by trailing nu...

檔案格式 gff格式

gff檔案格式 gff格式是 sanger 研究所定義,是一種簡單的 方便的對於 dna rna以及蛋白質序列的特徵進行描述的一種資料格式,已經成為序列注釋的通用格式,比如基因組的基因 許多軟體都支援輸入或者輸出gff格式。前格式定義的最新版本是版本3。原始定義見 song websitegff是存...

DOS檔案格式 與 UNIX檔案格式 轉換

這裡闡述兩種方法 1.使用vim的方法 在vim下 使用如下命令 set fileformat unix 就可轉換成 unix 檔案格式,也可使用其縮寫形式命令 set ff unix 直接輸入命令 set fileformat 或 set ff 還可查詢當前的命令格式。2.使用linux命令工具 ...