Sed 递归查找和替换Unix路径

Sed 递归查找和替换Unix路径,sed,substitution,Sed,Substitution,我正在尝试递归地查找root的所有实例,并将其替换为usr/local 我知道这个命令: find ./ -type f -exec sed -i -e 's/apple/orange/g' {} \; 在尝试用另一个字符串替换不带“/”的字符串时有效,但如何将“/”包含在替换的字符串中 要在替换中使用/,可以使用\进行转义, 或者s命令可以使用不同的分隔符: sed 's|root|usr/local|g' ... 此外,(非标准)-i选项需要FreeBSDsed(1)中的一个参数,并扩展

我正在尝试递归地查找
root
的所有实例,并将其替换为
usr/local

我知道这个命令:

find ./ -type f -exec sed -i -e 's/apple/orange/g' {} \;

在尝试用另一个字符串替换不带“/”的字符串时有效,但如何将“/”包含在替换的字符串中

要在替换中使用
/
,可以使用
\
进行转义,
或者
s
命令可以使用不同的分隔符:

sed 's|root|usr/local|g' ...
此外,(非标准)
-i
选项需要FreeBSD
sed(1)
中的一个参数,并扩展为macOS(OS X)
sed(1)
。在这种情况下,对于GNU
sed(1)
,提供零长度参数(
-i''
)将具有与没有参数相同的效果

但是,警告不要使用该用法:

不建议在就地编辑文件时提供零长度扩展名,因为在磁盘空间耗尽等情况下,可能会导致损坏或部分内容

此外,如果扩展不在其自身的参数中,则语法是兼容的:

sed -i.bak 's|root|usr/local|g' ...

转义那个东西:
's/root/user\/local/g'
@JNevill当我尝试这个时,我得到了:sed:RE错误:非法字节序列你在a上吗?是的。我在mac@jnevillth上,这可能是区域设置类型的问题。Try:
find./-type f-exec LC_ALL=C sed-i-e's/root/user\/local/g'{}