web-dev-qa-db-fra.com

Obtenir "erreur sed - séquence d'octets illégale" (en bash)

Faire de l’édition de flux pour changer l’icône méchante de Parallels. Il est mal développé et intégré à 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 retourne sed: RE error: illegal byte sequence

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

88
alt

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

Pourquoi l'erreur?

Sans pour autant LANG=C _ _ sed suppose que les fichiers sont codés selon le codage spécifié dans LANG et que le fichier (étant binaire) peut contenir des octets qui ne sont pas des caractères valides dans le codage de LANG (vous risqueriez ainsi d'obtenir séquence d'octets ').

Pourquoi LANG=C travail?

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

148
ldrg

LANG=C seul n'a pas fait l'affaire pour moi mais l'ajout de LC_CTYPE=C ainsi résolu.

69
Malström

En plus de LANG=C et LC_CTYPE=C, Je devais faire LC_ALL=C pour que cela fonctionne.

LC_ALL _ remplace tout individu LC_* catégories. Ainsi, l'approche la plus robuste consiste à utiliser LC_ALL=C sed ... - inutile de traiter également les autres variables.

21
rjpeter2

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

unset LANG

avant la commande sed.

Je ne sais pas ce que j'ai fait ni pourquoi cela fonctionne, mais c'est ce qui s'est passé.

18
Adam Waite