reemplazar linea insertar bash sed

bash - linea - sed shell



Obteniendo "error de sed-secuencia de bytes ilegal"(en bash) (4)

Además de LANG=C y LC_CTYPE=C , tuve que hacer LC_ALL=C para hacer que esto funcione.

LC_ALL anula todas las categorías LC_* individuales. Por lo tanto, el enfoque más sólido es usar LC_ALL=C sed ... - no es necesario tratar también con las otras variables.

Esta pregunta ya tiene una respuesta aquí:

Haciendo una edición de flujo para cambiar el desagradable icono de Parallels. Está poco desarrollado e integrado en la propia aplicación en lugar de ser un archivo de imagen. Así que he localizado este comando sed que tiene algunos buenos comentarios:

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

Devuelve sed: RE error: illegal byte sequence

¿Alguien puede explicar lo que esto significa? ¿Qué parte del comando es el problema?


Intente configurar la variable de entorno LANG ( LANG=C sed ... ) o use una de las herramientas sed binarias mencionadas aquí: reemplazo sed binario

¿Por qué el error?

Sin LANG=C sed supone que los archivos están codificados en cualquier codificación especificada en LANG y el archivo (que es binario) puede contener bytes que no son caracteres válidos en la codificación de LANG (por lo tanto, podría obtener ''secuencia de bytes ilegales'').

¿Por qué LANG=C funciona?

C pasa a tratar todos los caracteres ASCII como ellos mismos y los caracteres que no son ASCII como literales.


Logré hacerlo ejecutando:

unset LANG

antes del comando sed

No estoy seguro de lo que hice o por qué funciona, pero lo hice.


LANG=C solo no funcionó, pero agregar LC_CTYPE=C también lo resolvió.