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
选项需要FreeBSDsed(1)
中的一个参数,并扩展为macOS(OS X)sed(1)
。在这种情况下,对于GNUsed(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'{}代码>