90 votes

Obtention de "sed error - illegal byte sequence" (en bash)

J'édite quelques flux pour changer la méchante icône de Parallels. Elle est mal développée et intégrée à l'application elle-même plutôt que d'être un fichier image. J'ai donc trouvé cette commande sed qui a de bons retours :

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

Il retourne sed: RE error: illegal byte sequence

Quelqu'un peut-il expliquer ce que cela signifie ? Quelle partie de la commande pose problème ?

150voto

ldrg Points 1160

Essayez de régler le LANG variable d'environnement ( LANG=C sed ... ) ou utilisez l'un des outils binaires sed mentionnés ici : remplacement binaire de sed

Pourquoi cette erreur ?

Sans LANG=C sed suppose que les fichiers sont encodés dans l'encodage spécifié dans le champ LANG et le fichier (étant binaire) peut contenir des octets qui ne sont pas des caractères valides dans le format LANG (vous pourriez ainsi obtenir une "séquence d'octets illégale").

Pourquoi est-ce que LANG=C travail ?

Il se trouve que le C traite tous les caractères ASCII comme eux-mêmes et les caractères non ASCII comme des littéraux.

71voto

Malström Points 421

LANG=C seul n'a pas fait l'affaire pour moi mais en ajoutant LC_CTYPE=C aussi bien résolu.

22voto

rjpeter2 Points 11

En plus de LANG=C y LC_CTYPE=C Je devais le faire. LC_ALL=C pour que ça marche.

LC_ALL prévaut sur toutes les LC_* catégories. Ainsi, l'approche la plus robuste consiste à utiliser LC_ALL=C sed ... - Il n'est pas nécessaire de tenir compte des autres variables.

18voto

Adam Waite Points 2242

J'ai réussi à le faire en courant :

unset LANG

avant le sed commandement.

Je ne sais pas trop ce que j'ai fait ni pourquoi ça marche, mais ça a marché.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X