"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?
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.
LANG=C
seul n'a pas fait l'affaire pour moi, mais ajouter LC_CTYPE=C
ainsi résolu.
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.
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.