获取“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=C
和LC_CTYPE=C
,我必须做LC_ALL=C
才能使其工作。
LC_ALL
覆盖所有单独的LC_*
类别。 因此,最可靠的方法是使用LC_ALL=C sed ...
– 不需要处理其他variables。