
在電影產業中,WAV 音訊檔案在 iXML RIFF 區塊中包含元資料是很常見的。讀取此元資料的簡單方法是在文字編輯器(如 BBEdit 或 Notepad++ 甚至 TextEdit)中開啟 WAV 檔案。但是使用命令列cat
或tail
它不起作用,我只看到垃圾字元。如果有必要的話,我正在使用 macOS 10.13。為什麼cat
與這些文字編輯應用程式不同?
這是一個範例文件,iXML 一直位於底部:http://www.gallery.co.uk/ixml/examples/usesEntireiXMLSpec.WAV
答案1
輸出檔案時cat
,它會原樣逐字節輸出,不替換空格或點或其他類型的替換字元。因此,當它輸出 .WAV 檔案中較早的二進位音訊樣本資料時,其中一些位元組恰好與老式終端控製程式碼和「轉義序列」(以「ESC」字元開頭的位元組序列,可以是用於執行更改文字或背景顏色、清除終端螢幕以及在終端螢幕內重新定位遊標等操作)。您的終端模擬器(Terminal.app 或 iTerm2 或其他)嘗試遵循這些控製程式碼和轉義序列,這會破壞其通常顯示文字的方式,並以不可預測的方式進行。
許多基於終端的工具都提供選項,可讓您處理包含一些二進位資料與純可列印 ASCII 文字混合的檔案。例如,cat
有一個-v
選項可以用可列印序列取代 ASCII 控製字元。還有vis(1)
、od(1)
、hexdump(1)
、strings(1)
等。您也可以使用sed(1)
、grep(1)
、 和等工具awk(1)
嘗試從檔案中的二進位資料中提取 ASCII XML 資料。
在這些選項中,我認為strings(1)
對您來說可能是最有希望的。它掃描文件,查找可列印 ASCII 字元的中長不間斷運行(字串),並自動輸出它找到的任何此類字串。因此,由於 XML 是純粹可列印的 ASCII,因此strings(1)
應將其全部列印出來,同時跳過所有二進位音訊資料。