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
选项,但需要一个参数,即备份文件的后缀。与GNUsed
一样,它不是可选的。因此,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
设置任何内容