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

求Shell脚本:将大HTML表格转为单引号包裹的竖线分隔文本

处理HTML表格转指定格式的Shell脚本

方案一:用pup+jq(推荐,兼容复杂HTML结构)

这两个是专门的命令行HTML/JSON解析工具,处理HTML比正则更可靠,适合大文件和复杂表格结构。

  1. 先安装工具(以Debian/Ubuntu为例):
sudo apt install pup jq
  1. 编写脚本(比如命名为html2table.sh):
#!/bin/bash
# 传入HTML文件路径作为参数,无参数则读取标准输入
INPUT_FILE="${1:-/dev/stdin}"

# 提取表格数据并转换为目标格式
pup 'table tr json{}' "$INPUT_FILE" | jq -r '
    .[]
    | .children
    | map(.text | gsub("'\''"; "\\\\'\\''"))  # 转义内容中的单引号,避免格式冲突
    | "|\'" + join("|\'") + "\'"
'
  1. 使用方式:
# 处理单个文件并输出到文本
./html2table.sh input.html > output.txt

# 通过管道输入处理
cat input.html | ./html2table.sh > output.txt

脚本会自动识别表格列数,处理内容中的单引号转义,输出完全符合要求的格式。


方案二:用sed+awk(无需额外工具,适合规整HTML)

如果无法安装外部工具,且HTML格式规整(<td>标签单独一行、内容无跨行),可以用这个方案:

  1. 编写脚本:
#!/bin/bash
INPUT_FILE="${1:-/dev/stdin}"

# 提取<td>内文本并按行分组转换
sed -n 's/.*<td[^>]*>\(.*\)<\/td>.*/\1/p' "$INPUT_FILE" | awk '
    BEGIN {
        # 自动统计表格列数
        col_count=0
        while ((getline line < "'"$INPUT_FILE"'") > 0) {
            if (line ~ /<tr>/) {
                while ((getline td_line < "'"$INPUT_FILE"'") > 0) {
                    if (td_line ~ /<\/tr>/) break
                    if (td_line ~ /<td/) col_count++
                }
                close("'"$INPUT_FILE"'")
                break
            }
        }
        current_col=0
    }
    {
        # 转义单引号
        gsub(/'\''/, "\\'\\''", $0)
        if (current_col == 0) {
            printf "|\047%s\047", $0
        } else {
            printf "|\047%s\047", $0
        }
        current_col = (current_col + 1) % col_count
        if (current_col == 0) print ""
    }
    END {
        if (current_col != 0) print ""
    }
'
  1. 使用方式和方案一一致。

注意:该方案依赖HTML结构规整,若<td>内容跨行或标签嵌套,可能提取错误,优先推荐方案一。

内容的提问来源于stack exchange,提问作者Sooraj P George

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:00:10