เมื่อcat
ส่งออกไฟล์มันจะส่งออกเป็นแบบไบต์ต่อไบต์แบบไม่มีการแทนที่ช่องว่างหรือจุดหรืออักขระการแทนที่ชนิดอื่น ดังนั้นเมื่อมันส่งออกข้อมูลตัวอย่างเสียงไบนารีก่อนหน้านี้ในไฟล์. WAV บางส่วนของไบต์เหล่านั้นเกิดขึ้นเพื่อจับคู่กับรหัสควบคุมเทอร์มินัลโรงเรียนเก่าและ "escape sequences" (ลำดับของไบต์ที่ขึ้นต้นด้วยอักขระ "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)
จึงควรพิมพ์ออกมาทั้งหมดในขณะที่ข้ามข้อมูลเสียงไบนารีทั้งหมด
strings usesEntireiXMLSpec.WAV
เพื่อแยกสตริงข้อความ