通过Bash ShellScripting从url列表中提取父域名

我有一个这样的url列表:

http://noto.zrobimystrone.pl/pucenter/images/NGdocs/ http://visionwebmkt.com/unsubscribe.php?M=879552&C=b744d324e38f5f3b0bcf549f1d57a3ab&L=20&N=497 http://www.meguiatramandai.com.br/unsubscribe.php?M=722&C=8410431be55bf12faac13d18982d71cd&L=1&N=3 http://www.contatoruy.in/link.php?M=86457&N=4&L=1&F=H http://www.maxxivrimoveis.com.br/ http://www.meguiatramandai.com.br/unsubscribe.php?M=722&C=8410431be55bf12faac13d18982d71cd&L=1&N=2 http://arm.smilecire.com/ch+urch38146263923bpa.stor/imp-roved258021029his+health212149011 http://hurl.zonalrems.com/ge.tyo-ur584372780599hea+lth247408058un/der+control21211901 http://harp.doomyjupe.com/see.this-better/life+58291551346csexdrive663295668+better/how.981692016 http://beefy.toneyvaws.com/no+tice/how/35306640b+see/app=5429204last/attempt=457943182 http://kirk.yournjuju.com/shop/sam.sclub-win=ter/58387369768esame+673844946.bett.er-loo.k981686408 http://idly.theirpoem.com/veri-fy/notice-7853508818b2glob/al=who.43639603inc.lusion-610549278 http://wva188.suleacatan.com/credit-score/review/-551694841511001sfdghsfdgsdfg63887839 http://cop.forterins.com/app.lyto=face962540097dtolo+oko.ung268570307yo.un-ger8752507 http://vni116.gaelsyaray.com/qertqetert//-dghjghjghd5531864856415612229498430 http://ticket.prategama.com/shop/sam.sclub-win=ter/752490935same+226373195.bett.er-loo.k212801 http://cbu125.quetxviii.com/cvbnvbn7551116db537203--swrtytry664896546 http://c5a.dicadodia.com.br/pass4sp09/NetAffProTeste-1.html http://snub.woadsbevy.com/ama/zing-753773417oppe-tun/ity+217801.is-here/now=236922473 http://mkt.livrariacultura.com.br/pub/cc?_ri_=X0Gzc2X%3DWQpglLjHJlYQGgzfB7tPi0PuyyJ71ES 

我想只提取父母的域名,例如:

 http://noto.zrobimystrone.pl/pucenter/images/NGdocs/ http://visionwebmkt.com/unsubscribe.php?M=879552&C=b744d324e38f5f3b0bcf549f1d57a3ab&L=20&N=497 http://www.meguiatramandai.com.br/unsubscribe.php?M=722&C=8410431be55bf12faac13d18 

 zrobimystrone.pl visionwebmkt.com meguiatramandai.com.br 

我努力了

 awk '{gsub("http://|/.*","")}1' list.txt 

并得到以下结果:

 noto.zrobimystrone.pl visionwebmkt.com www.meguiatramandai.com.br www.contatoruy.in www.maxxivrimoveis.com.br www.meguiatramandai.com.br arm.smilecire.com hurl.zonalrems.com harp.doomyjupe.com beefy.toneyvaws.com 

但不知道如何从noto.zrobimystrone.pl只得到父母的名字。

Solutions Collecting From Web of "通过Bash ShellScripting从url列表中提取父域名"

使用awk

 awk -F \/ '{l=split($3,a,"."); print (a[l-1]=="com"?a[l-2] OFS:X) a[l-1] OFS a[l]}' OFS="." file|sort -u contatoruy.in dicadodia.com.br doomyjupe.com forterins.com gaelsyaray.com livrariacultura.com.br maxxivrimoveis.com.br meguiatramandai.com.br prategama.com quetxviii.com smilecire.com suleacatan.com theirpoem.com toneyvaws.com visionwebmkt.com woadsbevy.com yournjuju.com zonalrems.com zrobimystrone.pl 

一个“简单”的bash解决方案。 在Solaris 11.2 x86上的bash shell中进行测试。

 #!/bin/bash while IFS=/ read HTTP NULL FQDN PAGE do PARENT=${FQDN#*.} if [[ $PARENT != *"."* ]] then echo $FQDN else echo $PARENT fi done < fileOfURLs.txt 

如果没有包含模式测试的字符串,太多的域可能被剥离。 如果段落可以减少,那么整个脚本现在看起来像这样:

 #!/bin/bash while IFS=/ read HTTP NULL FQDN PAGE do PARENT=${FQDN#*.} [[ $PARENT != *"."* ]] && echo $FQDN || echo $PARENT done < fileOfURLs.txt 

bash变量替换是将变量FQDN的内容从左边的任何字符剥离到第一个点(包括第一个点)。

测试条件是询问PARENT变量的内容是否不包含点。 如果值不在某个点上,则测试结果为true,并显示原始FQDN内容。 如果测试评估结果为假(数值中还有一个点),则显示PARENT的内容。

你可以使用这个awk:

 awk -F'.' '{gsub("http://|/.*","")} NF>2{$1="";$0=substr($0, 2)}1' OFS='.' list.txt zrobimystrone.pl visionwebmkt.com meguiatramandai.com.br contatoruy.in maxxivrimoveis.com.br meguiatramandai.com.br smilecire.com zonalrems.com doomyjupe.com toneyvaws.com yournjuju.com theirpoem.com suleacatan.com forterins.com gaelsyaray.com prategama.com quetxviii.com dicadodia.com.br woadsbevy.com livrariacultura.com.br 

我想这取决于你父母的意思。 如果通过“父母”,你的意思是在DNS区域顶点的顶部(例如,zrobimystrone.pl),那么正确的方法是在DNS中查找。 如果您要求任何名称的SOA,那么您可以使用DNS来获取父区域SOA记录。所以,请尝试:

 for i in $(awk '{gsub("http://|/.*","")}1' list.txt); do dig soa $i | grep -v ^\; | grep SOA | awk '{print $1}'; done 

这将给你一个更准确的清单,但它运行速度较慢,是次优。 其他答案没有考虑TLD中使用的TLD名称的所有可能的变体,例如www.somecompany.org.uk,所以这一切取决于您需要的准确程度。

一个简单的解决方案来获得父母的域名

 echo http://www.humkinar.pk | awk -F '/' '{print $3}' www.humkinar.pk