You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Bash脚本为HTML文件中无FQDN的CSS引用补全域名?

Bash脚本补全HTML中CSS引用的完整域名

我刚好做过类似的需求,用sed就能快速实现这个功能——它是Bash环境下处理文本替换的利器。下面是完整的解决方案,包含各种边界情况的处理:

核心脚本实现

这个脚本会自动识别HTML中不带完整域名的CSS引用(不管是相对路径还是根路径),补全你指定的FQDN,同时跳过已经带有http://或https://的外部引用,还会自动备份原文件防止误操作:

#!/bin/bash

# === 配置区:请根据你的需求修改 ===
TARGET_HTML="index.html"  # 要处理的HTML文件路径
FQDN="http://my.domain"   # 你的完整域名,比如http://example.com
# ================================

# 预处理FQDN:自动移除结尾的斜杠(避免拼接时出现双斜杠)
FQDN=$(echo "$FQDN" | sed 's/\/$//')

# 执行替换操作
sed -i.bak -E "s/href=(\"|')((?!https?:\/\/)(\/)?([^\"']*\.css))\1/href=\1$FQDN\/\4\1/g" "$TARGET_HTML"

echo "✅ 替换完成!原文件已备份为 ${TARGET_HTML}.bak"

脚本细节解释

让我拆解一下关键部分,方便你理解和修改:

  • -i.bak:直接修改目标文件,同时生成.bak后缀的备份文件,万一替换出错可以快速恢复
  • -E:启用扩展正则表达式,支持更复杂的匹配规则
  • 正则匹配逻辑:
    • href=(\"|'):同时匹配用双引号或单引号包裹的href属性(覆盖HTML里的两种常见写法)
    • (?!https?:\/\/):负向前瞻,确保我们只处理没有完整域名的引用(自动跳过外部CSS资源)
    • (\/)?([^\"']*\.css):捕获路径部分,自动忽略开头的斜杠(避免拼接后出现http://my.domain//css/style.css这种不规范的双斜杠)
    • 替换后的href=\1$FQDN\/\4\1:把捕获的路径拼接到FQDN后面,保持原有的引号格式

测试示例

假设你的原始HTML有这些CSS引用:

<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="./css/reset.css">
<link rel="stylesheet" href="../fonts/font.css">
<link rel="stylesheet" href="/assets/main.css">
<link rel="stylesheet" href="http://external.domain/css/global.css"> <!-- 这个不会被修改 -->
<link rel="stylesheet" href='css/theme.css'> <!-- 单引号的情况 -->

运行脚本后,会变成:

<link rel="stylesheet" href="http://my.domain/css/style.css">
<link rel="stylesheet" href="http://my.domain/css/reset.css">
<link rel="stylesheet" href="http://my.domain/fonts/font.css">
<link rel="stylesheet" href="http://my.domain/assets/main.css">
<link rel="stylesheet" href="http://external.domain/css/global.css">
<link rel="stylesheet" href='http://my.domain/css/theme.css'>

额外提示

  • 如果需要处理src属性加载的CSS(虽然这种情况很少见),只需要把正则里的href改成(href|src)即可
  • 如果你想先预览替换效果再修改文件,可以去掉-i.bak参数,直接在终端输出结果:
    sed -E "s/href=(\"|')((?!https?:\/\/)(\/)?([^\"']*\.css))\1/href=\1$FQDN\/\4\1/g" "$TARGET_HTML"
    

内容的提问来源于stack exchange,提问作者Total Lose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:07:37