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

Bash脚本提取HTML表格数据失败,请求修复指导

修复提取HTML表格内容的Bash脚本

需求说明

有一个结构固定、仅数据值变动的网页,包含简单HTML表格,需要提取表格内容为以下格式:

Examiner: Person

Qualification: Teacher

Nation: Any

原脚本无任何输出,修复后的完整脚本如下:

#!/bin/bash
URL="http://thewebpageurl"

# 抓取页面内容,并用tr压缩多余空白和换行
HTML=$(curl -s "$URL" | tr -s '\n' ' ')

# 提取<table>到</table>之间的内容,处理跨行情况
TABLE_HTML=$(echo "$HTML" | grep -o '<table[^>]*>.*</table>')

# 提取每行<tr>中的两个<td>内容,整理成目标格式
echo "$TABLE_HTML" | awk '
BEGIN { RS = "</tr>" }
{
    # 提取第一个<td>的文本
    match($0, /<td[^>]*>([^<]*)<\/td>/, label)
    # 提取第二个<td>的文本
    match(substr($0, RSTART+RLENGTH), /<td[^>]*>([^<]*)<\/td>/, value)
    # 清理前后空白并输出,空行分隔
    if (label[1] != "" && value[1] != "") {
        gsub(/^[ \t]+|[ \t]+$/, "", label[1])
        gsub(/^[ \t]+|[ \t]+$/, "", value[1])
        print label[1] " " value[1] "\n"
    }
}' | sed '$d'  # 移除最后一行多余的空行

原脚本问题分析

  1. Grep正则错误:原脚本的grep -o '\<table\[^\>\]\*\>.\*\</table\>'存在转义错误,且grep默认单行模式下.*无法匹配跨行内容,导致无法提取完整表格。
  2. Sed语法错误:sed 's/\<\\/table.\*//'的转义和匹配逻辑完全错误,没有实际作用。
  3. Awk处理逻辑缺陷:原awk的分隔符和替换规则无法正确提取<td>内的文本,且没有处理空白字符,导致输出混乱。

修复要点

  • 使用tr -s '\n' ' '将页面内容的换行压缩为空格,避免跨行匹配问题。
  • 修正grep的正则表达式,直接匹配<table>标签范围的内容。
  • 用awk的match函数精准提取每个<td>内的文本,并用gsub清理前后空白。
  • 最后用sed移除末尾多余的空行,保证输出格式符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:34:55