94

做一些流编辑来改变讨厌的 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

谁能解释这意味着什么?命令的哪一部分有问题?

4

4 回答 4

160

尝试设置LANG环境变量 ( LANG=C sed ...) 或使用此处提到的二进制 sed 工具之一:二进制 sed 替换

为什么会出错?

没有LANG=Csed 假定文件以指定的任何编码进行编码,并且文件(二进制)可能包含在' 编码LANG中不是有效字符的字节(因此您可能会得到'非法字节序列')。LANG

为什么LANG=C有效?

C 恰好将所有 ASCII 字符视为自身,将非 ASCII 字符视为文字。

于 2012-07-02T03:59:42.990 回答
75

LANG=C独自一人并没有为我解决问题,但添加LC_CTYPE=C也解决了它。

于 2013-03-18T02:07:26.493 回答
29

除了LANG=Cand之外LC_CTYPE=C,我还必须这样做LC_ALL=C才能使其正常工作。

LC_ALL覆盖所有单个LC_*类别。因此,最稳健的方法是使用LC_ALL=C sed ...——无需同时处理其他变量。

于 2014-05-07T16:48:41.133 回答
19

我设法通过运行来做到这一点:

unset LANG

sed命令之前。

不知道我做了什么或为什么它有效,但它确实有效。

于 2013-06-04T16:37:07.467 回答