Почему cat командной строки отличается от BBEdit?

0

В киноиндустрии часто встречаются аудиофайлы WAV, содержащие метаданные, в блоке iXML RIFF. Один из простых способов прочитать эти метаданные - открыть файл WAV в текстовом редакторе, таком как BBEdit, Notepad ++ или даже TextEdit. Но с командной строкой catили tailона не работает, я просто вижу мусорные символы. Я использую macOS 10.13, если это имеет значение. Чем catотличаются эти приложения для редактирования текста?

Вот пример файла с iXML полностью внизу: http://www.gallery.co.uk/ixml/examples/usesEntireiXMLSpec.WAV

Эллиот Б
источник
Это бинарный файл. Используйте strings usesEntireiXMLSpec.WAVдля извлечения текстовых строк.
DavidPostill

Ответы:

2

Когда 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)следует распечатать все это, пропуская все двоичные аудиоданные.

Spiff
источник
В самом деле. Смотрите комментарий, который я только что добавил к вопросу. Кстати, хорошее объяснение.
DavidPostill