Получение "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 ...
- не нужно также обращаться с другими переменными.