在文件中搜索和替换

Pom*_*rio 5 bash sed

我在链接中找到了以下很棒的小脚本

$ find /home/bruno/old-friends -type f -exec sed -i 's/ugly/beautiful/g' {} \;

但我真的不明白最后一点

{} \;

有人可以解释一下吗??

谢谢!

Cés*_*sar 4

这不完全是sed语法问题,而是find语法问题。

{}是一个容器,将替换命令正在处理的文件的名称sed

如果你find这样使用:

$ find . -type f -name *.py -exec head {} \;
Run Code Online (Sandbox Code Playgroud)

这将找到 Python 脚本并显示每个文件的头部。如果当前目录中有三个脚本:

  • 1.py
  • 2.py
  • 3.py

{}包含每个文件名并head在每个文件上执行命令。

该参数末尾-exec需要一个,以便它可以识别命令参数的结尾(在本例中),但是,为了防止扩展,您需要使用.;sed;\

请记住,如果使用以下命令,则可以一次执行多个命令;

$ ls; pwd;
Run Code Online (Sandbox Code Playgroud)

这将列出目录 ( ls) 并打印您的工作目录 ( pwd)。论证-exec还需要;. 但由于您不想将;分隔命令的 与参数;一部分的混淆,因此您需要使用 来转义它。-execfind\

或者,您可以在以下位置使用引号;

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

我希望我说清楚了