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

如何用Bash解析含class=error的tr标签HTML并提取指定文本

解决Bash中提取class为error的内文本的问题

为什么sed没成功?

sed默认是逐行处理的,而你的目标内容(区块、标签)跨多行分布,普通sed命令无法跨上下文匹配;另外HTML标签的格式(比如空格、换行、属性顺序)可能变化,用正则硬匹配HTML很容易失效,这就是你返回空值的原因。

推荐方案:用专门的HTML解析工具

处理HTML最可靠的方式是用支持DOM/CSS选择器/XPath的工具,以下是两种常用方案:

1. 使用xmllint(多数Linux系统默认预装)

xmllint是libxml2工具集的一部分,支持HTML解析和XPath查询:

# 从input.html中提取目标文本
xmllint --html --xpath '//tr[@class="error"]/td[1]/a/text()' input.html 2>/dev/null

2. 使用pup(轻量HTML解析工具,需安装)

pup支持CSS选择器,语法更简洁直观,适合快速提取内容:

# 安装方式(以Debian/Ubuntu为例)
sudo apt install pup
# 提取目标文本
pup 'tr.error td:first-child a text{}' input.html
  • tr.error:匹配所有class为error的元素
  • td:first-child:选中下的第一个
  • text{}:提取该元素下的文本内容

应急方案:用sed跨多行匹配(不推荐)

如果临时无法安装工具,可以用sed的多行匹配功能,但仅适用于格式固定的HTML:

sed -n '/<tr class="error">/,/<\/tr>/ { /<a.*>/ s/.*<a[^>]*>\(.*\)<\/a>.*/\1/ p }' input.html

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:22:32