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

时间:2012-07-02 03:44:59

标签: bash sed

进行一些流编辑以更改令人讨厌的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 个答案:

答案 0 :(得分:145)

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

为何出错?

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

为什么LANG=C有效?

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

答案 1 :(得分:68)

仅仅{p> LANG=C对我来说没有做到这一点,但添加LC_CTYPE=C也解决了它。

答案 2 :(得分:21)

除了LANG=CLC_CTYPE=C之外,我还必须LC_ALL=C才能使其发挥作用。

LC_ALL会覆盖所有单个LC_*类别。因此,最强大的方法是使用LC_ALL=C sed ... - 无需处理其他变量。

答案 3 :(得分:18)

我设法通过运行来实现:

unset LANG
sed命令之前

不确定我做了什么或为什么它有效但是确实如此。