如何从Bash中的文件中提取HTML锚点的href?

时间:2017-08-06 14:41:41

标签: html bash

在页面https://developer.android.com/studio/index.html,有一个指向Linux的Android SDK工具的链接,我想通过脚本下载。不幸的是,没有“简单”链接可用于下载最新版本,因此我想从HTML本身中提取链接。

该链接由ID linux-tools标识,并包含在多行中:

  <a onclick="return onDownload(this)" id="linux-tools" data-modal-toggle="studio_tos"
    href="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip">sdk-tools-linux-38593

我想将href提取到Bash脚本中的变量中。我到目前为止最接近的是:

grep -o -z '<a.[^<]*id="linux-tools"[^<]*</a>' index.html

输出以上两行。

如何使用通常可用的shell命令获取实际链接?

2 个答案:

答案 0 :(得分:0)

您可以使用sed首先选择您要使用的范围,例如:

sed -n '/id="linux-tools"/,+1 p' index.html

这将为您提供包含id="linux-tools"加一行的行的地址。

现在,您可以使用sed替换来从该范围中提取href

sed -n '/id="linux-tools"/,+1 s/.*href="\([^"]*\).*$/\1/p' index.html

答案 1 :(得分:0)

你的正则表达非常接近。剩下要做的就是提取href部分:

grep -zoP '<a[^<]*id="linux-tools"[^<]*href="\K[^"]+' index.html

我们使用PCRE(-P)和PCRE的特殊转义序列the reset match start \K,这导致任何先前匹配的字符不包含在最终匹配序列中(我们只需要双引号之间的部分) )。