我有一大堆文件需要替换其中的完整 URL 方案。有些文件名包含空格。经过多次搜索和尝试,我找到了最接近的答案:
find /somedir -type f -print0 -exec sed -i'' -e 's#http\\:\\/\\/domain.com#https\\:\\/\\/www.domain.com#g' {} +
生成的文件已http:
删除方案,只剩下//
- 即“//www.domain.com”
此外,还会创建一个新文件,并将其附加-e
到文件名中。 -some file.php-e
这显然是不受欢迎的。
虽然这肯定足够了(删除文件后*-e
,我内心的强迫症真的想知道如何正确地做到这一点。注意:我在 Mac 上本地工作,但也将在 Linux 上执行此操作。
非常感谢您的任何想法!
答案1
解决方案 1:一种方法是find
使用xargs
:
find /dir -type f -print0 | xargs -0 sed -i 's#http://domain.com#https://www.domain.com#g'
解决方案 2:另一个方法是使用find
,-exec
与您的问题非常相似:
find /dir -type f -exec sed -i 's#http://domain.com#https://www.domain.com#g' {} +
两种解决方案都将sed
使用多个文件作为参数进行调用。因此,sed
不是对每个文件调用一次,而是对每组文件调用一次。
解决方案 3:除了sed
,您还可以使用perl
以下搜索替换作业:
perl -i -pe 's#http://domain.com#https://www.domain.com#g' file
结合find
/xargs
命令:
find /dir -type f -print0 | xargs -0 perl -i -pe 's#http://domain.com#https://www.domain.com#g'