"Sed erreur illégale séquence d'octets" (en bash) [en double]

cette question a déjà une réponse ici:

faire un peu d'édition de flux pour changer l'icône de Parallels désagréables. C'est mal développé et intégré dans l'application elle-même plutôt que d'être un fichier image. J'ai donc situé cette commande sed qui a un bon feedback:

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?

85
demandé sur Prince John Wesley 2012-07-02 07:44:59

4 réponses

essayez de définir la variable d'environnement LANG ( LANG=C sed ... ) ou utilisez l'un des outils binaires sed mentionnés ici: remplacement binaire sed

pourquoi l'erreur?

sans LANG=C sed suppose que les fichiers sont encodés dans n'importe quel encodage est spécifié dans LANG et le fichier (étant binaire) peut contenir des octets qui ne sont pas des caractères valides dans LANG l 'encodage (donc vous pourriez obtenir "illégal séquence d'octets').

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.

137
répondu ldrg 2017-05-23 12:18:05

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

65
répondu Malström 2016-06-11 01:03:36

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

LC_ALL l'emporte sur toutes les catégories individuelles LC_* . Ainsi, l'approche la plus robuste est d'utiliser LC_ALL=C sed ... - pas besoin de traiter aussi avec les autres variables.

18
répondu rjpeter2 2016-09-03 22:45:33

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 il l'a fait.

17
répondu Adam Waite 2013-06-04 16:37:07