Получение "sed error - незаконная последовательность байтов" (в bash)

Выполнение редактирования потока, чтобы изменить неприятный значок Parallels. Он плохо развит и встроен в приложение, а не является файлом изображения. Поэтому я нашел эту команду sed, которая имеет хорошие отзывы:

sudo sed -i.bak s/Parallels_Desktop_Overlay_128/Parallels_Desktop_Overlay_000/g /Applications/Parallels\ Desktop.app/Contents/MacOS/prl_client_app

Он возвращает sed: RE error: illegal byte sequence

Может кто-нибудь объяснить, что это значит? Какая часть команды является проблемой?

Ответ 1

Попробуйте установить переменную среды LANG (LANG=C sed ...) или используйте один из двоичных инструментов sed, упомянутых здесь: двоичная замена sed

Почему ошибка?

Без LANG=C sed предполагает, что файлы закодированы в любом кодировании, указанном в LANG, и файл (будучи двоичным) может содержать байты, которые не являются допустимыми символами в кодировке LANG (таким образом, вы можете получить "незаконный байт" последовательность ').

Почему работает LANG=C?

C просто происходит, чтобы обрабатывать все символы ASCII как себя, а не символы ASCII как литералы.

Ответ 2

LANG=C один не помогло, но добавил LC_CTYPE=C, а также решил его.

Ответ 3

Мне удалось это сделать, запустив:

unset LANG

перед командой sed.

Не уверен, что я сделал или почему он работает, но это произошло.

Ответ 4

В дополнение к LANG=C и LC_CTYPE=C мне пришлось сделать LC_ALL=C, чтобы заставить это работать.

LC_ALL переопределяет все отдельные категории LC_*. Таким образом, наиболее надежным подходом является использование LC_ALL=C sed ... - не нужно также обращаться с другими переменными.