Когда 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
для извлечения текстовых строк.