我需要在许多文件中搜索一个域名(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
如果文件所有权/权限需要,你可以运行命令