我有一个网站,其中包含数十种以下格式的超链接:
cout<<(a + b);
我想获取所有超链接及其文本值,其中超链接以<a href=/news/detail/1/hyperlink>textvalue</a>
开头。
输出应采用以下格式:
/news/detail/1/
答案 0 :(得分:0)
首先,人们会走进这里(可能是在谈论一个叫Cthuhlu的人),并告诉您awk / regex不是HTML解析器。他们是对的,您应该考虑一下他们所说的话。实际上,您经常可以逃脱这样的事情:
sed -n 's/^.*<a\s\+href\=\([^>]\+\)>\([^<]\+\)<\/a>.*$/\2\n\1/p' input_file.html
这告诉sed
读取文件input_file.html
,找到与正则表达式匹配的行,将其替换为您为输出指定的部分,然后丢弃其他所有内容。结果将打印到终端。
这还假设文件的格式设置为使得<a href=/news/detail/1/hyperlink>textvalue</a>
的每个实例都位于单独的行上。如果需要,可以轻松修改正则表达式以适应不同的格式。
如果您想要的所有链接都以/news/detail/1/
开头,则可能会起作用:
sed -n 's/^.*<a\s\+href\=\(\/news\/detail\/1\/[^>]\+\)>\([^<]\+\)<\/a>.*$/\2\n\1/p' input_file.html