在多个文件中搜索并将一个域替换为另一个域

在多个文件中搜索并将一个域替换为另一个域

我需要在许多文件中搜索一个域名(domain1.it)并将其替换为其他域名(domain2.com)。

我尝试过

sudo find '/abc/abc/' -type f -exec sed 's/domain1\it/domain2\com/g' '{}' \;

但结果很慢,一个漫长的过程,以及所有的搜索文件都出现在屏幕上,以及不允许您使用其他命令。

是否存在更快的方法(也许使用 grep 或者我不知道)来完成我需要做的事情?

谢谢

答案1

如果没有-i--in-place选项,您的sed命令将把编辑的输出流式传输到终端。将命令放在后台不会改变这一点。

接下来,让我们检查你的 sed 表达式s/domain1\it/domain2\com/g

在 sed 正则表达式中,字母i不是特殊的 - 因此\i与 相同,i并且与字符字面匹配i。您可能想转义句点,.以使其成为字面意思。 a 的 RHSs/pattern/replacement/只是一个字符串,根本不需要特殊转义。所以它应该是:

s/domain1\.it/domain2.com/g

您可以通过sed将 替换为 来一次传递多个文件,从而加快命令速度。请注意,在 bash 或大多数其他常见 shell 中不需要引用 。{} \;{} +{}

综合起来:

find '/abc/abc/' -type f -exec sed -i.bak 's/domain1\.it/domain2.com/g' {} +
  • .bak如果你确定不需要保存文件备份,则可以省略

  • &您可以像往常一样在后台运行整个命令

  • sudo如果文件所有权/权限需要,你可以运行命令

相关内容