Command line &引用;无效的命令代码。”;在Mavericks上运行find和sed后sed出错

Command line &引用;无效的命令代码。”;在Mavericks上运行find和sed后sed出错,command-line,sed,find,osx-mavericks,Command Line,Sed,Find,Osx Mavericks,我运行以下命令来查找旧网址并将其替换为新网址 find . -type f -print0 | xargs -0 sed -i \ 's/http:\/\/www\.oldwebaddress\.com\/techblog/https:\/\/github\.com\/myname/g' 但是,我得到了以下错误 sed: 1: "./.DS_Store": invalid command code . 我在阅读了一些堆栈溢出帖子后尝试了这个,但也没有成功 find . -type f -pr

我运行以下命令来查找旧网址并将其替换为新网址

find . -type f -print0 | xargs -0 sed -i \
's/http:\/\/www\.oldwebaddress\.com\/techblog/https:\/\/github\.com\/myname/g'
但是,我得到了以下错误

sed: 1: "./.DS_Store": invalid command code .
我在阅读了一些堆栈溢出帖子后尝试了这个,但也没有成功

find . -type f -print0 | xargs -0 sed -i "" \
's/http:\/\/www\.oldwebaddress\.com\/techblog/https:\/\/github\.com\/myname/g'

sed: RE error: illegal byte sequence
我做错了什么?

有帮助吗

另外,如果只执行
-print
而不是
-print0
,则可以使用
xargs
替换
xargs-0

您也可以考虑使用<代码> Perl < /C> >而不是BSD<代码> SED

find . -type f -print | xargs perl -pi.bak -e 's/http\:\/\/www\.oldwebaddress\.com\/techblog/https\:\/\/github\.com\/myname/g'

在文件名的末尾添加
.bak
,以执行替换并保存所有文件备份。如果不希望创建备份,请使用
perl-pi-e

Mac OS X上的
sed
接受
-i
选项,但需要一个参数,即备份文件的后缀。与GNU
sed
一样,它不是可选的。因此,
sed
脚本尝试使用您的
s//
命令作为后缀,然后第一个文件名恰好不是有效的
sed
命令

对于第二次尝试,使用
-i”“
,不太清楚发生了什么。我假设在
后面有一个反斜杠,或者整个批次都在一行上,因此它在语法上是正确的

编辑路径名时,使用
/
以外的字符作为分隔符更简单。通常,
%
起作用:

-e 's%http://www\.oldwebaddress\.com/techblog%https://github\.com/myname%g'
但你可以使用任何字符;Control-A或Control-G也非常有效,甚至比
%
更不可能出现在URL中

不过,我不清楚为什么会出现re错误(无效字节序列)。从问题中复制和粘贴并没有显示问题,另一个引用的建议是
LANG=C LC\u CTYPE=C
,但我没有遇到
LANG=en\u US.UTF-8
的问题,并且没有为
LC\u CTYPE
设置任何内容