在curl中仅维护具有特定字符串和扩展名的链接

在curl中仅维护具有特定字符串和扩展名的链接,curl,awk,grep,Curl,Awk,Grep,我尝试使用以下命令获取网页上的所有链接: curlhttps://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&a

我尝试使用以下命令获取网页上的所有链接:

curlhttps://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

谢谢

你可以用一个简单的
awk
来简化
grep
cut
,但它不在问题的上下文范围之内。但是对于您的需求,只需将输出管道连接到
AWK
as

| awk '/(iPhone10,6)/ && /.ipsw$/'
它定义了两个正则表达式条件来匹配
(iPhone10,6)
,并以
.ipsw
扩展名结束

正如在
awk
本身中承诺的那样,我们可以使用GNU
awk
中的
gensub()
函数用
href
捕获字符串,一旦URL被识别,如果它与所需字符串相匹配,则使用
match()
函数打印它

curl ... | awk '{url=gensub(/^(.*)href="([^"#]+)"(.*)$/,"\\2","g",$0); if (match(url, /iPhone10,6.*\.ipsw/)) print url}'

如公认答案中所述,您可以将
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
输出

# 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


注意:这比实际方法快得多。

您能将
curl
命令的输出发布到问题吗?并显示您需要的确切输出抱歉,编辑了这篇文章。太棒了。真不敢相信这么简单!如果你不介意的话,用一个
awk
如何暗示
grep
cut
。我渴望学习:)