Когда catвыводится файл, он выводит его побайтно как есть, без замены пробелов или точек или каких-либо других символов подстановки. Поэтому, когда он выводит данные двоичного аудиосэмпла ранее в файле .WAV, некоторые из этих байтов совпадают с управляющими кодами терминала старой школы и «escape-последовательностями» (последовательностями байтов, начинающимися с символа «ESC», который может быть используется для таких вещей, как изменение цвета текста или фона, очистка экрана терминала и изменение положения курсора на экране терминала). Ваш эмулятор терминала (Terminal.app или iTerm2 или что-то еще) пытается соблюдать эти управляющие коды и escape-последовательности, что исключает обычное отображение текста и делает это непредсказуемым образом.
Многие терминальные инструменты имеют опции, позволяющие вам работать с файлами, в которых некоторые двоичные данные смешаны с чисто печатным текстом 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для извлечения текстовых строк.