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

如何用Bash提取目标HTML内容?为何捕获<tr>标签失败?

问题原因及解决方案

为什么你的grep脚本抓不到目标<tr>标签?

  • grep默认按单行匹配:你的HTML里<tr>和</tr>之间是多行内容(包含换行、缩进),而grep默认正则模式中,.不会匹配换行符,.*只能匹配当前行内的内容,所以无法匹配跨多行的<tr>...</tr>区块。
  • 正则基础模式的局限性:原生grep的基础正则不支持跨行匹配,必须启用特定选项才能处理换行场景。

修复脚本的几种方法

方法1:启用grep的跨行匹配模式

修改grep命令,添加-z选项(将输入视为以null分隔的内容,实现跨行匹配),同时用-oP启用Perl兼容正则(支持非贪婪匹配,避免误匹配多个<tr>区块):

#!/bin/bash
HTML_FILE="html_content.html"
tr_tag=$(grep -zPo '<tr>.*?blue.*?</tr>' "$HTML_FILE")
echo "$tr_tag"

方法2:用sed实现跨行匹配

sed天然支持多行内容处理,用以下命令提取包含blue的<tr>区块:

sed -n '/<tr>/,/<\/tr>/{H;${x;/blue/p;}}' html_content.html

更稳妥的方案:用专门的HTML解析工具

正则处理HTML极易因标签格式变化(比如属性顺序、换行、缩进)失效,推荐用专业工具:

  • xmllint(系统自带XML/HTML解析工具):
xmllint --html --xpath '//tr[td[text()="blue"]]/td[1]/a/@href' html_content.html 2>/dev/null
  • pup(轻量HTML解析工具,需单独安装):
cat html_content.html | pup 'tr:has(td:contains("blue")) td:first-child a attr{href}'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:45:00