递归查找并替换Unix路径

时间:2017-09-19 19:32:53

标签: sed substitution

我正在尝试以root递归查找并替换usr/local的所有实例。

我知道这个命令:

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

在尝试替换没有" /"的字符串时有效与另一个,但我该怎么做包括" /"在被替换的字符串中?

1 个答案:

答案 0 :(得分:0)

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

sed 's|root|usr/local|g' ...

此外,(非标准)-i选项需要FreeBSD sed(1)中的参数,以及扩展名为macOS(OS X)sed(1)的参数。在这种情况下,给出零长度参数(-i '')将具有与GNU sed(1)没有参数相同的效果。

然而man-page警告不要使用这个用法:

  

不建议在就地编辑文件时提供零长度扩展,因为在磁盘空间耗尽的情况下存在损坏或部分内容的风险,等等。

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

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