我需要用从网页的一部分检索到的数据填充BASH脚本中的列表。当前,我已经手动创建了一个静态列表,但是我希望列表内容是动态生成的。这样,如果将新项目添加到页面,则脚本的后续运行将反映这些新项目。
源页面:https://support.apple.com/en-us/HT210060
我想提取标题为“ macOS,iOS和tvOS”的部分,以列出类似以下的列表:
updateServers="appldnld.apple.com 80
gg.apple.com 80
gg.apple.com 443
gnf-mdn.apple.com 443
gnf-mr.apple.com 443
gs.apple.com 80
gs.apple.com 443
ig.apple.com 443
mesu.apple.com 80
mesu.apple.com 443
ns.itunes.apple.com 443
oscdn.apple.com 80
oscdn.apple.com 443
osrecovery.apple.com 80
osrecovery.apple.com 443
skl.apple.com 443
swcdn.apple.com 80
swdist.apple.com 443
swdownload.apple.com 80
swdownload.apple.com 443
swpost.apple.com 80
swscan.apple.com 443
updates-http.cdn-apple.com 80
updates.cdn-apple.com 443
xp.apple.com 443"
最终,我想将页面的每个部分输出到其自己的单独列表中,但是目前,上面的部分是我的主要关注点。
谢谢大家。这是一个很棒的社区。
理想情况下,您将使用HTML解析器,例如Ruby的Nokogiri或Python的Beautifulsoup。对于纯Bash解决方案,您可以使用以下脚本:
#!/bin/bash
wget -q https://support.apple.com/en-us/HT210060 -O- \
| \grep -ziPo "(?s)<h3>macos.*?<h3>" \
| xargs -0 \
| \grep -P "<tr><td>|<td>[\d, ]+</td>" \
| sed 's:.*<td>\(.*\)</td>:\1:'
输出:
$ script.sh
appldnld.apple.com
80
gg.apple.com
443, 80
...
80
updates.cdn-apple.com
443
xp.apple.com
443