进行一些流编辑以更改令人讨厌的Parallels图标。它开发得很差并嵌入到应用程序本身而不是图像文件。所以我找到了这个有很好反馈的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
任何人都能解释这意味着什么吗?命令的哪个部分是问题?
答案 0 :(得分:145)
尝试设置LANG
环境变量(LANG=C sed ...
)或使用此处提到的二进制sed工具之一:binary sed replacement
为何出错?
没有LANG=C
sed假设文件以LANG
中指定的任何编码进行编码,文件(二进制)可能包含LANG
编码中无效字符的字节(因此你可以获得'非法字节序列')。
为什么LANG=C
有效?
C恰好将所有ASCII字符视为自身,非ASCII字符视为文字。
答案 1 :(得分:68)
LANG=C
对我来说没有做到这一点,但添加LC_CTYPE=C
也解决了它。
答案 2 :(得分:21)
除了LANG=C
和LC_CTYPE=C
之外,我还必须LC_ALL=C
才能使其发挥作用。
LC_ALL
会覆盖所有单个LC_*
类别。因此,最强大的方法是使用LC_ALL=C sed ...
- 无需处理其他变量。
答案 3 :(得分:18)
我设法通过运行来实现:
unset LANG
在sed
命令之前。
不确定我做了什么或为什么它有效但是确实如此。