在页面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命令获取实际链接?
答案 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
,这导致任何先前匹配的字符不包含在最终匹配序列中(我们只需要双引号之间的部分) )。