获取“sed错误 – 非法字节序列”(在bash中)

做一些stream编辑来改变讨厌的Parallels图标。 它发展不佳,embedded到应用程序本身,而不是一个图像文件。 所以我find了这个sed命令有一些很好的反馈:

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

它返回sed: RE error: illegal byte sequence

谁能解释这是什么意思? 命令的哪一部分是问题?

尝试设置LANG环境variables( LANG=C sed ... )或使用这里提到的二进制sed工具之一: binary sed replacement

为什么错误?

没有LANG=C sed假定文件是用LANG指定的任何编码进行编码的,文件(二进制)可能包含LANG编码中无效字符的字节(因此你可能得到'非法字节序列')。

为什么LANG=C工作?

C碰巧把所有的ASCII字符当作自己,将非ASCII字符当作文字。

LANG=C本身并没有为我做伎俩,但joinLC_CTYPE=C也解决了它。

我设法通过运行:

 unset LANG 

sed命令之前。

不知道我做了什么或为什么它的作品,但它确实。

除了LANG=CLC_CTYPE=C ,我必须做LC_ALL=C才能使其工作。

LC_ALL覆盖所有单独的LC_*类别。 因此,最可靠的方法是使用LC_ALL=C sed ... – 不需要处理其他variables。