的意义是什么 {} \; 在find -exec sed中

Sen*_*ran 3 sed

给出两个sed的例子.

sed -i 's/ugly/beautiful/g' /home/bruno/old-friends/sue.txt
Run Code Online (Sandbox Code Playgroud)

这对我来说很容易理解.

但是这个:

$ find /home/bruno/old-friends -type f -exec sed -i 's/ugly/beautiful/g' {} \;
Run Code Online (Sandbox Code Playgroud)

为什么{} \;在第二个中很重要?这有什么意义和意义?我假设`;' 是为-exec.但为什么要逃脱,括号是什么意思呢?可以想象它们与C函数的范围相似吗?

T.J*_*der 7

这实际上不是为了sed,它是为了find.该行告诉find找到匹配的文件,当它找到它们时,执行sed.的{}是,其中的文件名将是上sed的命令行,和\;标记的的结束sed命令行.(理论上你可以继续其他find行动;只有在sed返回时才会发生0.)

因此,如果find找到该文件/home/foo/bar,sed命令行将是

sed -i 's/ugly/beautiful/g' /home/foo/bar

  • @SenthilKumaran:我们必须逃避`;`因为在大多数shell中,`;`用于分隔命令.(例如,在你的shell中尝试`echo"a ;; echo"b"`.)因此,如果我们没有逃避它,它将不是`find`的参数,它将是该命令的结束在shell级别,下一个开始. (2认同)