如何在Mac终端用sed正则批量替换所有HTML文件的title标签
批量替换HTML title标签的Mac终端命令
场景说明
你的站点目录结构如下:
📦My Site ┣ 📂modules ┃ ┣ 📜123.html ┃ ┗ 📜456.html ┣ 📂cart ┃ ┣ 📜index.html ┃ ┗ 📜cart.html
项目包含数十个文件夹、数千个HTML文件,需要将所有子文件夹下HTML文件中内容各不相同的<title>%Different Titles%</title>统一替换为<title>My New Website</title>。
可直接执行的命令
- 先进入项目根目录,把路径替换成你本地
My Site文件夹的实际路径即可:
cd /path/to/your/My\ Site
- 执行批量替换(适配Mac自带sed,直接修改原文件,覆盖绝大多数常规单行title场景):
find . -type f -name "*.html" -exec sed -i '' 's/<title>.*<\/title>/<title>My New Website<\/title>/g' {} +
特殊场景适配
如果项目里存在跨行书写的title标签(即<title>和</title>不在同一行),上面的sed命令无法匹配,可以用Mac系统自带的perl执行替换,不需要额外安装软件:
find . -type f -name "*.html" -exec perl -0777 -i -pe 's/<title>.*?<\/title>/<title>My New Website<\/title>/sg' {} +
参数说明
find . -type f -name "*.html":递归遍历当前目录下所有.html格式的文件,覆盖所有层级的子文件夹sed -i '':Mac自带BSD版本sed要求-i参数必须传入备份文件后缀,传入空字符串''表示不生成备份,直接修改原文件;如果需要留备份防止改错,可以写成-i '.bak',执行后会给每个修改的html生成一个带.bak后缀的备份文件- 正则匹配规则:匹配任意title标签内容,直接替换为目标title文本,忽略原有title的内容差异
内容的提问来源于stack exchange,提问作者Евгений Греков
相关产品推荐
相关产品推荐

