Obtenir une «erreur sed – séquence d’octets illégale» (en bash)

Faire de l’édition de stream pour changer l’icône méchante de Parallels. Il est mal développé et intégré dans l’application elle-même plutôt que d’être un fichier image. J’ai donc localisé 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 renvoie sed: RE error: illegal byte sequence

Quelqu’un peut-il expliquer ce que cela signifie? Quelle partie de la commande est le problème?

Essayez de définir la variable d’environnement LANG ( LANG=C sed ... ) ou utilisez l’un des outils sed binarys mentionnés ici: remplacement sed binary

Pourquoi l’erreur?

Sans LANG=C sed suppose que les fichiers sont encodés selon le codage spécifié dans LANG et que le fichier (binary) peut contenir des octets qui ne sont pas des caractères valides dans le codage de LANG (vous pouvez donc obtenir une «séquence d’octets illégaux»).

Pourquoi LANG=C fonctionne-t-il?

C arrive juste à traiter tous les caractères ASCII comme eux-mêmes et les caractères non-ASCII comme des littéraux.

LANG=C seul n’a pas fait l’affaire, mais l’ajout de LC_CTYPE=C également résolu.

J’ai réussi à le faire en exécutant:

 unset LANG 

avant la commande sed .

Je ne suis pas sûr de ce que j’ai fait ou pourquoi cela fonctionne, mais c’est ce que j’ai fait.

En plus de LANG=C et LC_CTYPE=C , j’ai dû faire LC_ALL=C pour que cela fonctionne.

LC_ALL écrase toutes les catégories LC_* individuelles. Ainsi, l’approche la plus robuste consiste à utiliser LC_ALL=C sed ... – pas besoin de traiter également les autres variables.