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

获得;sed错误-非法字节序列“;(在bash中),bash,sed,Bash,Sed,进行一些流编辑以更改讨厌的平行线图标。它开发得很差,并嵌入到应用程序本身,而不是一个图像文件。所以我找到了这个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错误:非法字节序列 有人能解释一下这是什么

进行一些流编辑以更改讨厌的平行线图标。它开发得很差,并嵌入到应用程序本身,而不是一个图像文件。所以我找到了这个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错误:非法字节序列


有人能解释一下这是什么意思吗?命令的哪个部分有问题?

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

为什么会出错?

如果没有
LANG=C
sed,则假定文件以
LANG
中指定的任何编码进行编码,并且文件(为二进制)可能包含在
LANG
编码中无效字符的字节(因此可能会获得“非法字节序列”)

为什么
LANG=C
起作用?


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

LANG=C
单独使用并不能解决我的问题,但添加了
LC_CTYPE=C
并很好地解决了这个问题。

我通过运行:

unset LANG
在执行
sed
命令之前


我不知道我做了什么,也不知道它为什么起作用,但它确实起了作用。

除了
LANG=C
LC\u CTYPE=C
之外,我还必须做
LC\u ALL=C
才能让它起作用


LC\u ALL
覆盖所有单个
LC\u*
类别。因此,最可靠的方法是使用
LC\u ALL=C sed…
-无需同时处理其他变量。

如果
bash
是您的shell,您可以输入
export LANG=C
并重试。很好,但是使用
LC\u ALL=C sed…
是更可靠的方法:如果
LC\u ALL
LC\u CTYPE
已设置(对于非
C
)的内容,设置
LANG
将无效。(
LC\u ALL
覆盖所有单独设置的类别(如果有),而
LANG
仅对未明确设置的类别生效。)对我来说,
LANG=C
不起作用,但在OSX 10.8上,
LC\u ALL=C
对我也起了同样的作用。谢谢!一个有效的
LC\u CTYPE=C
值就足以解决这个问题:
LC\u CTYPE=C sed…
。但是,如果
LC\u ALL
被设置(设置为
C
以外的值),这就不起作用了,因为这会覆盖所有单独的
LC.*
类别。因此,最可靠的方法是使用
LC.*all=C sed…
。这对我在macOS SierraI上的工作很有效。在遵循本教程时,我需要做上述修复:这会删除错误,但实际上对我来说什么也解决不了。至于它为什么有效:如果您的语言环境最初设置为th
[export]LANG=…
(与设置
LC\u ALL
或单独设置
LC\u*
类别相反),然后取消设置
LANG
会使所有
LC\u*
类别恢复为
“C”
;以
LC\u CTYPE
C
结束是解决问题的方法。相反,如果
LC\u ALL
或甚至
LC\u CTYPE
特别设置为
C
以外的值,你的方法将不起作用。@mklement0,我认为你的评论给出了一个很好的答案…!@Arjan:谢谢;我确实创建了一个a回答-不是这个问题,而是一个非常类似的问题:多解释一点,please@rpax:实际上,C的有效
LC\u CTYPE
值就足够了,因此使用
LC\u CTYPE=C sed…
(直接在有问题的命令之前)通常是足够的,除非设置了覆盖所有单个
LC.*
类别的
LC.*
。因此,最可靠的方法是使用
LC.\u ALL=C sed…
-无需同时处理其他变量。这应该是公认的答案。希望您不介意,我将@mklement0的注释编辑到了answ中呃。@Qix:我的贡献被添加为一条评论,因为我认为编辑太过侵入性:你的编辑相当于把单词放进@rjpeter2的嘴里,并且,以目前的形式,结果是一个有点自相矛盾的答案。请注意,我在本页所有答案的评论中推荐了
LC\u ALL=C sed…
方法,包括丁是目前被接受的一个。为了完整的图片,我建议就重复的问题咨询我的同事。那些来自谷歌的人:先试试。我来这个帖子的次数比我想承认的要多。