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

如何用51行代码替换文件夹中所有.html文件的前69行?

批量替换HTML文件头部导航的AWK实现方案

问题背景

手里有数十个不同名称的HTML文件,需要将文件中旧的head和导航部分替换为新的优化代码,同时title标签要么设为固定的「Plant Database」,要么根据文件名动态生成。

旧代码片段(需替换的部分)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/templatefrø.dwt" codeOutsideHTMLIsLocked="false" -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- InstanceBeginEditable name="doctitle" -->
<title>Apotekerkattost - Malva sylvestris</title>
<!-- InstanceEndEditable -->
<!-- InstanceBeginEditable name="head" -->
<!-- InstanceEndEditable -->
<link rel="shortcut icon" href="bilder/faviconefferus.ico">
<link href="styles.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="header"><img src="bilder/efferus1.jpg" width="289" height="129" alt="Efferus veksthus" /></div>
<div id="menu">
<a href="index.html" ><img src="bilder/Home.jpg" border="0" width="128" height="35" /></a><a href="planteshop.html"><img src="bilder/Frørød.jpg" border=0 width="123" height="35" /></a>
<a href="soppshop.html"><img src="bilder/soppsort.jpg" border="0" width="138" height="35" /></a>
<a href="skogshop.html"><img src="bilder/skogshop.jpg" border="0" width="138" height="35" /></a>
<a href="Oppskrifter.html"><img src="bilder/Oppskrifter.jpg" border="0" width="118" height="35" /></a>

</div>
<br >
<div id="middle">
  <div id="submenu"><table width="201" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><div align="center"><img src="bilder/subtop.jpg" width="198" height="24" /></div></td>
  </tr>
  <tr>
    <td><div align="center" class="sub-bg">
    
      <p>
      <a href="planteshop.html">Planteshop</a><br><br>
      <a href="fro.html">Frø- og plantekatalog</a><br><br>
            <a href="plantebistand.html">Plantebistand</a><br><br>
                  <a href="kurs.html">Kurskalender </a><br><br>
      <a href="bie.html">Humle- og bieplanter</a><br><br>
      <a href="hsoner.html">Planter inndelt etter herdighetssone</a><br><br>
      <a href="plantepakker.html">Plantepakker</a><br><br>
        <a href="trehage.html">Hva er en skoghage?</a><br><br>
         <a href="skoghagebilder.html">Bilder fra en skoghage</a><br><br>
        <a href="nitrogen.html">Nitrogenfiksering</a><br><br>
        <a href="jord.html">Jorddekkere</a><br><br>
        <a href="vind.html">Vindbrytere</a><br><br>
        <a href="tre.html">Trær</a><br><br>
        <a href="busker.html">Busker</a><br><br>
        <a href="perennial.html">Stauder</a><br><br> 
        <a href="systemplanter.html">Systemplanter</a><br><br> 
        <a href="andre.html">Andre planter</a><br><br>
           <a href="Rovinsekter.html">Skadeinsekter og nytteinsekter</a><br><br>
            <a href="plantesykdommer.html">Plantesykdommer</a><br><br>
        <a href="formering.html">Planteformering</a><br><br>
        <a href="beskjaering.html">Beskjæring</a><br><br>

        <a href="ugressmiddler.html">Ugressmiddel</a><br><br>
        <a href="http://www.facebook.com/EfferusVeksthus">Efferus veksthus på <img src="bilder/fb.jpg" width="15" height="15" /></a><br><br>
            <a href="https://www.facebook.com/groups/662923897182715/?fref=ts">"Dyrking av Storhassel i Norge" på <img src="bilder/fb.jpg" width="15" height="15" /></a><br><br>
             <a href="https://www.facebook.com/groups/245491145952851/?fref=ts">Skadeinsekter,  nytteinsekter og plantesykdommer på <img src="bilder/fb.jpg" width="15" height="15" /></a><br><br>
        <a href="hvemerfro.html">Hvem er Efferus?</a><br><br>
        <a href="kontaktfro.html">Kontakt</a><br><br>
        <a href="open.html">Åpningstider</a><br><br>
      </p>
    </div></td>
  </tr>
  <tr>
    <td><div align="center"><img src="bilder/subbottom.jpg" width="198" height="35" /></div></td>
  </tr>
</table>
</div>

新代码片段(替换后的内容)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Plant Database</title>
    <link rel="shortcut icon" href="bilder/deciduous-tree.ico">
    <link href="main_styles.css" rel="stylesheet" type="text/css"/>
    <style>
        @import url('https://fonts.googleapis.com/css2?family=Domine:wght@400;600;700&display=swap');
        @import url('https://fonts.googleapis.com/css2?family=Domine:wght@400;600;700&family=Lato:ital,wght@0,300;0,400;0,700;0,900;1,300;1,400;1,700;1,900&display=swap');
        @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,500;1,400&display=swap');
    </style>
</head>
    
<!-- ALWAYS ON HOME BUTTON -->
<a href="/NEW_index.html"><img id=left_space style="position: fixed; top: 1.5rem;" src="./bilder/Efferus_logo_black.png" width="100px"></a>

<!-- HEADER -->
<nav class="navbar" >
    
    <!-- LOGO -->
    <div id=left_space class="logo"><a href="/NEW_index.html"><img src="bilder/Efferus_logo_white.PNG" width="100px" alt="efferus_logo"/></a></div>
    
    <!-- NAVIGATION MENU -->
    <ul class="nav-links">
      
        <!-- USING CHECKBOX HACK -->
      <input type="checkbox" id="checkbox_toggle" />
      <label for="checkbox_toggle" class="hamburger">&#9776;</label>
      
      <!-- NAVIGATION MENUS -->
      <div class="menu">
        
        <li><a href="./plantebistand.html">Plantebistand</a></li>
        <li class="services">
          <a href="./database.html">Database</a>
          <!-- <ul class="dropdown">
            <li><a href="./fro.html">Frø og Planter </a></li>
            <li><a href="./Oppskrifter.html">Konserving</a></li>
            <li><a href="./husapotek.html">Husapotek</a></li>
            <li><a href="/">Dropdown 3</a></li>
            <li><a href="/">Dropdown 4</a></li>
          </ul> -->
        </li>
        <li><a href="./hvemer.html">Hvem er Efferus?</a></li>
        <li><a href="./kontakt.html">Kontakt</a></li>
      </div>
    </ul>
</nav>

实现方案

步骤1:准备新代码文件

将上面的新代码片段保存为new_header.html,放在和目标HTML文件相同的目录下。


方案A:固定标题「Plant Database」

  1. 创建AWK脚本文件replace_fixed_title.awk,内容如下:
BEGIN {
    # 读取新头部内容到变量
    while ((getline line < "new_header.html") > 0) {
        new_header = new_header line "\n"
    }
    close("new_header.html")
    skip = 1  # 初始状态:跳过旧内容
}

# 匹配旧内容的结束行(旧代码最后一行)
/^<\/div>$/ {
    print new_header  # 输出新头部
    skip = 0          # 关闭跳过状态
    next              # 不输出当前旧行
}

# 非跳过状态时输出当前行
!skip { print }
  1. 批量执行替换
    在终端中运行以下命令,遍历所有HTML文件并替换:
# 先备份所有文件(可选但推荐)
cp *.html backup/

# 批量替换
for file in *.html; do
    awk -f replace_fixed_title.awk "$file" > "$file.tmp" && mv "$file.tmp" "$file"
done

方案B:根据文件名动态生成标题

该方案会将HTML文件名去掉.html后缀后作为页面标题,比如malva.html的标题会变成malva。

  1. 创建AWK脚本文件replace_dynamic_title.awk,内容如下:
BEGIN {
    # 读取新头部内容到数组
    while ((getline line < "new_header.html") > 0) {
        header_lines[++line_count] = line
    }
    close("new_header.html")
    skip = 1
}

# 匹配旧内容结束行
/^<\/div>$/ {
    # 提取文件名(去掉.html后缀)
    split(FILENAME, name_parts, ".")
    page_title = name_parts[1]
    
    # 输出修改后的头部
    for (i=1; i<=line_count; i++) {
        if (header_lines[i] ~ /<title>Plant Database<\/title>/) {
            print "<title>" page_title "</title>"
        } else {
            print header_lines[i]
        }
    }
    skip = 0
    next
}

# 非跳过状态时输出当前行
!skip { print }
  1. 批量执行替换
    同样先备份文件,然后运行:
cp *.html backup/

for file in *.html; do
    awk -f replace_dynamic_title.awk "$file" > "$file.tmp" && mv "$file.tmp" "$file"
done

注意事项

  • 先对单个文件测试脚本,确认效果后再批量执行
  • 务必备份原文件,避免操作失误丢失数据
  • 如果旧代码的结束行不是^</div>$,需要调整脚本中的匹配规则,确保准确识别旧内容的结尾

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:05:25