【问题标题】:Extract parent domain name from a list of url through Bash ShellScripting通过 Bash Shell 脚本从 url 列表中提取父域名
【发布时间】:2014-01-29 19:13:13
【问题描述】:

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

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

【问题讨论】:

    标签: linux bash unix awk


    【解决方案1】:

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

    【讨论】:

    • 除了谢谢你我还能说什么?这是完美的工作。干杯吧!!
    【解决方案2】:

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

    【讨论】:

    • 酷,但我发现这种方法存在问题:对于来自http://meudis.com.br/media/wb.php?p=u8/u4/rs/eot/s5/rs 的域 meudis.com.br,它只显示“com.br”
    • 如果你想要最准确,那么我想whois 数据库需要调查,否则这样的解决方案会出现类似的情况。
    【解决方案3】:

    一个“简单”的 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 变量的内容是否不包含点。如果它在值的某处不包含点,则测试评估为真,并将显示原始 FQDN 内容。如果测试评估为假,(值中仍有一个点)将显示 PARENT 的内容。

    【讨论】:

      【解决方案4】:

      我想这取决于你所说的父母是什么意思。如果“父级”是指 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,因此这完全取决于您需要的准确度。

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-24
          • 1970-01-01
          • 2023-03-06
          • 2020-04-01
          • 2019-09-16
          • 1970-01-01
          • 1970-01-01
          • 2020-09-06
          相关资源
          最近更新 更多