Когда 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)
чтобы попытаться извлечь XML-данные ASCII из двоичных данных в файле.
Я думаю, что из этих вариантов наиболее подходящим для вас может быть strings(1)
. Он просматривает файл в поисках средних и длинных непрерывных циклов (строк) печатаемых символов ASCII и автоматически выводит любые найденные строки. Так как XML является чисто печатным ASCII, strings(1)
должен распечатать все это, пропуская все двоичные аудиоданные.