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

时间:2014-01-29 19:13:14

标签: linux bash unix awk

我有一个像这样的网址列表:

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中获取父名。

5 个答案:

答案 0 :(得分:5)

使用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

答案 1 :(得分:1)

A"简单" 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

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

#!/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内容。如果测试评估为false,(值中仍有一个点),则显示PARENT的内容。

答案 2 :(得分:0)

你可以使用这个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

答案 3 :(得分:0)

我想这取决于你父母的意思。如果“父”是指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,所以这一切都取决于您需要的准确度。

答案 4 :(得分:0)

获取父域名的简单解决方案

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