2014-01-29 5 views
3

У меня есть список URL-адресов, как это:Извлечение родительского доменного имени из списка URL через Баш ShellScripting

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, например.

ответ

4

Использование 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

Ну что еще я могу сказать, но спасибо? Он отлично работает. привет, брах! – Alan

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 
+0

Прикольно, но я нашел проблему с этим подходом: для домена meudis.com.br из 'http://meudis.com.br/ media/wb.php? p = u8/u4/rs/eot/s5/rs' он показывает только «com.br» – Alan

+0

Если вы хотите быть более точным, я думаю, что в базе данных 'whois' нужно искать в других случаях как возникнет такое решение. – anubhava

0

Я думаю, это зависит от того, что вы имеете в виду родителем. Если «родитель» означает «верх» вершины зоны в DNS (например, zrobimystrone.pl), то правильный способ сделать это - посмотреть, что происходит в DNS. Там трюк с DNS, где вы получите обратно в родительской зоне SOA запись, если вы попросите SOA для любого имени .. Итак, попробуйте следующее:

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

Это даст вам гораздо более точный список, но он работает путь медленнее и является субоптимальным. В других ответах не учитываются все возможные варианты имен доменов, используемых в TLD, например, www.somecompany.org.uk, поэтому все зависит от того, насколько точно вам это нужно.

1

«Простое» решение bash. Протестировано в оболочке bash на Solaris 11.2 x86.

#!/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 

Баша переменная замена принимает содержимое переменной FQDN и зачистки от левого любого характера до и включая первую точку.

Условие проверки спрашивает, не содержит ли содержимое переменной PARENT точку. Если он не имеет точки где-то в значении, тест оценивается как true и отображает исходное содержимое FQDN. Если тест оценивается как false, (в нем все еще есть точка) отображается содержимое PARENT.

0

Простое решение, чтобы получить доменное имя родительского

echo http://www.humkinar.pk | awk -F '/' '{print $3}' 
www.humkinar.pk 
Смежные вопросы