如何从HTML页面中提取固定前缀的指定链接?
提取HTML中固定前缀的目标链接
给定HTML片段:
<td><a href="test-2025-03-24_17-05.log">test-2025-03-24_17-05.log</a></td> <td><a href="PASS_report_test_2025-03-24_17h07m10.html">PASS_report_test_2025-03-24_17h07m10.html</a></td> <td><a href="TESTS-test_01.xml">TESTS-test_01.xml</a></td> <td><a href="TESTS-test_02.xml">TESTS-test_02.xml</a></td>
需要提取前缀为PASS_report_的链接,以下是几种可行方案:
方案1:使用grep(支持PCRE)
直接匹配带目标前缀的链接,利用正向预查精准提取:
grep -oP '(?<=href=")PASS_report_[^"]*' your_html_file
解释:
-o:只输出匹配到的部分-P:启用Perl兼容正则表达式(?<=href="):正向预查,定位到href="之后的位置PASS_report_[^"]*:匹配以PASS_report_开头,直到下一个"的所有内容
方案2:使用sed
调整原有sed命令,增加前缀过滤,只提取目标链接:
sed -n 's/.*href="\(PASS_report_[^"]*\).*/\1/p' your_html_file
解释:
-n:默认不输出行内容- 正则中精准捕获以
PASS_report_开头的链接部分,替换整行并输出匹配结果
关于原有命令无效的说明
你之前尝试的sed -n 's/.*href="\([^"]*\).*/\1/p' file会提取所有链接,若变量为空,大概率是执行时的shell转义问题,或是你没有正确过滤出目标链接导致后续处理出错。上述两种方案通过增加PASS_report_前缀匹配,既能精准提取目标,也避免了无关链接的干扰。
内容的提问来源于stack exchange,提问作者Archie
相关产品推荐
相关产品推荐

