LANG и Sed на OSX - PullRequest
       11

LANG и Sed на OSX

2 голосов
/ 09 августа 2010

В недавнем вопросе было отмечено, что на OSX запуск sed в файле не ascii дал странные результаты.Например, если вы это сделаете (/ usr / bin / cal - это случайный двоичный файл)

sed 's/[^A-Z]//' /usr/bin/cal

sed удалит все печатные символы, кроме AZ, но многие непечатаемые символы останутся.Однако, если вы сделаете

LANG='' sed 's/[^A-Z]//' /usr/bin/cal

, только AZ (и переводы строки) будут выведены.Почему?

Обычно LANG=en-US.UTF-8 Что происходит?В любом случае я не вижу, чтобы вывод sed мог считаться правильным в UTF-8.Это сломано, или есть какое-то понятие работы, которое я не понимаю?

Я знаю, что OSX sed соответствует POSIX и поэтому отличается от любимого GNU sed.

1 Ответ

3 голосов
/ 09 августа 2010

Двоичные данные, такие как содержимое / usr / bin / cal, не являются UTF-8, и поэтому будут путать любой код, который читает их, как если бы это было.В частности, любой байт с установленным старшим битом (например,> = 128) будет интерпретирован как часть многобайтовой последовательности, представляющей один символ, и, таким образом, будет исключен из вывода.Не все последовательности байтов с набором старших битов являются допустимыми UTF-8, поэтому все будет очень запутанно, но это, вероятно, объясняет, почему некоторые непечатаемые символы остаются, но (возможно) не являются другими.

Короче: если вы хотите использовать текстовые инструменты для двоичных данных, не надо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...