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

如何用sed移除HTML文件中href含todaycycling.com/tag的锚点标签

解决HTML中移除特定href锚点标签的问题

问题场景

你需要移除HTML文件里所有href属性包含todaycycling.com/tag的<a>标签,仅保留标签内的文本,其他<a>标签保持原样。

原始HTML内容:

Un Allemand peut en cacher un autre. Après Marcel Kittel, c'est André Greipel qui a imposé sa pointe de vitesse à l'issue de la cinquième étape du Tour d'Italie. Dans une arrivée en faux plat montant, le sprinteur de la formation Lotto Soudal a produit un intense effort pour aller chercher la victoire devant Arnaud Démare (FDJ), encore deuxième, et Sonny Colbrelli (Bardiani-CSF).

期望输出:

Un Allemand peut en cacher un autre. Après Marcel Kittel, c'est André Greipel qui a imposé sa pointe de vitesse à l'issue de la cinquième étape du Tour d'Italie. Dans une arrivée en faux plat montant, le sprinteur de la formation Lotto Soudal a produit un intense effort pour aller chercher la victoire devant Arnaud Démare (FDJ), encore deuxième, et Sonny Colbrelli (Bardiani-CSF).

分析现有尝试的sed命令

你试的这个命令思路是对的,但有个小局限:

sed 's|<a [^>]*todaycycling\.com\/tag\/[^>]*>\([^>]*\)</a>|\1|Ig' old.html > new.html

捕获组里的[^>]*会匹配到第一个>就停止,如果锚点文本里意外出现>(虽然这个场景概率极低),就会截断内容。另外,对href属性的引号兼容性处理不够灵活。

优化后的sed命令

针对你的需求,我调整了正则,让它更健壮:

sed -E 's|<a[^>]+href="?[^"]*todaycycling\.com/tag/[^"]*"?[^>]*>([^<]*)</a>|\1|Ig' old.html > new.html

这个命令的改进点:

  • 用[^>]+更精准匹配锚点标签开头的属性段,兼容标签内的空格和其他属性
  • 支持href属性带双引号或不带引号的情况
  • 用[^<]*捕获标签内文本,因为锚点结束标签是</a>,文本里不会出现<,比[^>]*更安全

运行这个命令后,就能完美得到你想要的结果——只清理目标锚点,保留其他正常链接和文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:36:33