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

如何编写Bash脚本,用Sed截取HTML/HTM内容生成临时文件?

解决Bash脚本处理HTML文件的需求

没问题,我来帮你完善这个Bash脚本,完全满足你的递归查找、内容裁剪和临时文件保存的需求!

完整可运行脚本

#!/bin/bash

# 替换为你的目标目录路径(比如./my-html-files)
TARGET_DIR="/path/to/your/target/directory"

# 递归查找所有.html/.htm文件,兼容带空格/特殊字符的文件名
find "$TARGET_DIR" -type f \( -name "*.html" -o -name "*.htm" \) -print0 | while IFS= read -r -d '' file; do
    # 生成临时文件名:原文件名+'-temp'后缀(比如index.html → index-temp.html)
    temp_file="${file%.*}-temp.${file##*.}"

    # 检查文件是否同时包含<body>和</body>标签,避免生成空文件
    if grep -q "<body>" "$file" && grep -q "</body>" "$file"; then
        # 使用sed完成内容裁剪:
        # 1. 删除<body>标签及其之前的所有行
        # 2. 删除</body>标签及其之后的所有行
        sed '1,/<body>/d; /<\/body>/,$d' "$file" > "$temp_file"
        echo "✅ 处理完成:$file → $temp_file"
    else
        echo "⚠️ 跳过文件(缺少<body>或</body>标签):$file"
    fi
done

关键部分详解

1. 递归查找文件

  • find "$TARGET_DIR" -type f \( -name "*.html" -o -name "*.htm" \):精准匹配目标目录下所有.html和.htm格式的文件
  • -print0 + while IFS= read -r -d '' file:完美处理文件名包含空格、特殊字符的场景,避免脚本出错

2. 临时文件名生成

${file%.*}-temp.${file##*.}是Bash的参数扩展技巧:

  • ${file%.*}:去掉文件名的后缀部分(比如/home/page.html → /home/page)
  • ${file##*.}:获取文件名的后缀(比如/home/page.html → html)
  • 最终生成的临时文件和原文件同目录、同后缀,仅在文件名中间加-temp

3. Sed内容裁剪逻辑

sed '1,/<body>/d; /<\/body>/,$d':

  • 1,/<body>/d:删除从第1行到第一个匹配<body>的行(包括<body>所在行)
  • /<\/body>/,$d:删除从第一个匹配</body>的行到文件末尾(包括</body>所在行)
  • 如果需要精确匹配纯<body>标签(不含属性),可以把正则改成/^<body>$/和/^<\/body>$/(^表示行首,$表示行尾)

4. 健壮性优化

添加grep -q检查:确保只有同时包含<body>和</body>的文件才会被处理,避免生成空的临时文件

使用方法

  1. 将脚本保存为process-html.sh
  2. 修改TARGET_DIR为你要处理的目录路径
  3. 赋予执行权限:chmod +x process-html.sh
  4. 运行脚本:./process-html.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:46:26