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

如何在bash中移除字符串内HTML标签并提取curl输出的base64内容

问题原因说明

  1. sed报错:你写的替换</td>的sed表达式s/</td>//g里,</td>中的/和sed默认的命令分隔符/冲突,sed会把/识别为表达式结束符,后面的td>就会被判定为非法参数。
  2. xmllint首次报错:你把cat file | sed '1,1d'的输出内容当成文件名参数传给了xmllint,xmllint误以为每行内容都是要加载的本地文件,所以报加载外部实体失败。
  3. xmllint返回XPath为空:你写的XPath里的tbody是浏览器渲染HTML时自动补的标签,原始返回的HTML中没有<tbody>节点,所以路径匹配不到内容。

解决方案

方法1:用sed/grep直接提取(更简单,无需处理HTML结构)

curl -X POST --data-urlencode "data=$DATA" -s http://10.10.11.100/tracker_diRbPr00f314.php \
| grep -A1 '<td>CWE:</td>' \
| tail -n1 \
| sed -e 's/.*<td>//g' -e 's/<\/td>//g' -e 's/[[:space:]]//g'

需要直接解码的话在末尾追加| base64 -d即可。

  • 命令逻辑:先过滤出包含<td>CWE:</td>的行和它的下一行,取第二行(CWE对应值的行),再用sed删除<td>前缀、</td>后缀和所有空白字符。

方法2:用xmllint正确提取

修正XPath去掉不存在的tbody节点,加string()直接取文本内容:

curl -X POST --data-urlencode "data=$DATA" -s http://10.10.11.100/tracker_diRbPr00f314.php \
| sed '1d' \
| xmllint --html --xpath 'string(/table/tr[2]/td[2])' - 2>/dev/null

2>/dev/null用于屏蔽xmllint的非必要警告。


原有sed写法的修正方案

如果你想继续用原来的多步sed写法,只要把sed的命令分隔符换成#等不会和内容冲突的符号即可:

# 错误写法
sed 's/</td>//g'
# 正确写法
sed 's#</td>##g'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:06:04