我尝试使用此命令获取网页上的所有链接:
curl https://www.theiphonewiki.com/wiki/Firmware/iPhone/11.x 2>&1 | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2
以上命令的示例输出:
/w/index.php?title=1.62.00&action=edit&redlink=1
/w/index.php?title=1.03.06&action=edit&redlink=1
http://appldnld.apple.com/ios11.2/091-50808-20171204-1847CB08-D51D-11E7-881F-9E4D7B7A613A/iPhone10,6_11.2_15C113_Restore.ipsw
/w/index.php?title=Cinar_15C114_(iPhone10,3)&action=edit&redlink=1
/w/index.php?title=Cinar_15C114_(iPhone10,6)&action=edit&redlink=1
http://appldnld.apple.com/ios11.2/091-51760-20171206-BA09FB16-D5F7-11E7-A344-36B9DC24E03F/iPhone10,6_11.2_15C114_Restore.ipsw
http://appldnld.apple.com/ios11.2/091-48448-20171204-6BBD49C4-BB37-457E-B21F-D3758FAFC4BC/iPhoneiTunesUpdateReadMe.ipd
/w/index.php?title=Cinar_15C153_(iPhone10,3)&action=edit&redlink=1
/w/index.php?title=Cinar_15C153_(iPhone10,6)&action=edit&redlink=1
http://appldnld.apple.com/ios11.2.1/091-54847-20171213-5FBB02FC-DDFB-11E7-9CEF-07E4FB2783B2/iPhone10,6_11.2.1_15C153_Restore.ipsw
http://appldnld.apple.com/ios11.2.1/091-56152-20171213-AC5CB9A6-DF73-11E7-99DE-5B0F1E4B8CED/iPhoneiTunesUpdateReadMe.ipd
/w/index.php?title=Cinar_15C202_(iPhone10,3)&action=edit&redlink=1
/w/index.php?title=Cinar_15C202_(iPhone10,6)&action=edit&redlink=1
http://appldnld.apple.com/ios11.2.2/091-58675-20170108-B84E4534-F0C8-11E7-B3D8-7C2D869EB6BD/iPhone10,6_11.2.2_15C202_Restore.ipsw
http://appldnld.apple.com/ios11.2.2/091-58073-20180108-92DAC272-EFDE-11E7-83F1-982A165C2DF1/iPhoneiTunesUpdateReadMe.ipd
从这里开始,我只希望链接包含单词iPhone10,6
,并以扩展名.ipsw
结尾。任何帮助如何从该命令行继续?
预期输出为:
http://appldnld.apple.com/ios11.2/091-50808-20171204-1847CB08-D51D-11E7-881F-9E4D7B7A613A/iPhone10,6_11.2_15C113_Restore.ipsw
http://appldnld.apple.com/ios11.2/091-51760-20171206-BA09FB16-D5F7-11E7-A344-36B9DC24E03F/iPhone10,6_11.2_15C114_Restore.ipsw
http://appldnld.apple.com/ios11.2.1/091-54847-20171213-5FBB02FC-DDFB-11E7-9CEF-07E4FB2783B2/iPhone10,6_11.2.1_15C153_Restore.ipsw
http://appldnld.apple.com/ios11.2.2/091-58675-20170108-B84E4534-F0C8-11E7-B3D8-7C2D869EB6BD/iPhone10,6_11.2.2_15C202_Restore.ipsw
谢谢!
答案 0 :(得分:2)
您可以使用一个简单的grep
简化cut
和awk
群,但它不在问题的上下文中。但是,根据您的要求,只需将输出管道传输到AWK
| awk '/(iPhone10,6)/ && /.ipsw$/'
定义了两个正则表达式条件,以匹配(iPhone10,6)
并以.ipsw
扩展名结束。
正如承诺在awk
本身做的那样,我们可以使用GNU gensub()
中的awk
函数来捕获带有href
的字符串,一旦URL为如果匹配使用match()
函数
curl ... | awk '{url=gensub(/^(.*)href="([^"#]+)"(.*)$/,"\\2","g",$0); if (match(url, /iPhone10,6.*\.ipsw/)) print url}'
答案 1 :(得分:1)
如接受的答案中所述,您可以将grep
- cut
组合替换为awk
。但也可以使用sed
。以下是这个问题的解决方法:
<强>脚本强>
# curl https://www.theiphonewiki.com/wiki/Firmware/iPhone/11.x 2>&1 |
sed -nE '/iPhone10,6.*\.ipsw/{s/^.*href="([^"#]+)".*$/\1/p}'
<强>输出强>
http://appldnld.apple.com/ios11.1seed/091-41194-20171023-8AEAD654-B5F2-11E7-8655-C76EBEA7E146/iPhone10,6_11.1_15B93_Restore.ipsw
http://appldnld.apple.com/ios11.1.1/091-42552-20171106-4525806E-C39A-11E7-B432-4BBCF8FD2868/iPhone10,6_11.1.1_15B150_Restore.ipsw
http://appldnld.apple.com/ios11.1.2/091-48137-20171116-4F9256F2-C9C7-11E7-8F92-8DE0F451CBCD/iPhone10,6_11.1.2_15B202_Restore.ipsw
http://appldnld.apple.com/ios11.2/091-50808-20171204-1847CB08-D51D-11E7-881F-9E4D7B7A613A/iPhone10,6_11.2_15C113_Restore.ipsw
http://appldnld.apple.com/ios11.2/091-51760-20171206-BA09FB16-D5F7-11E7-A344-36B9DC24E03F/iPhone10,6_11.2_15C114_Restore.ipsw
http://appldnld.apple.com/ios11.2.1/091-54847-20171213-5FBB02FC-DDFB-11E7-9CEF-07E4FB2783B2/iPhone10,6_11.2.1_15C153_Restore.ipsw
http://appldnld.apple.com/ios11.2.2/091-58675-20170108-B84E4534-F0C8-11E7-B3D8-7C2D869EB6BD/iPhone10,6_11.2.2_15C202_Restore.ipsw
注意: 显着 比实际方法更快。