Как извлечь доменное имя из URL?

Как я извлекаю доменное имя из URL с помощью удара? как: http://example.com/ на example.com должен работать на любой tld, не просто .com

38
задан jww 15 February 2019 в 17:38
поделиться

7 ответов

очень мало информации о том, как вы получаете эти URL ... пожалуйста, покажите больше информации в следующий раз. есть ли параметры в URL-адресе и т. д. и т.д. Между тем, простая манипуляция со строкой для вашего образца URL

например

$ s="http://example.com/index.php"
$ echo ${s/%/*}  #get rid of last "/" onwards
http://example.com
$ s=${s/%\//}  
$ echo ${s/#http:\/\//} # get rid of http://
example.com

другими способами, с помощью sed (GNU)

$ echo $s | sed 's/http:\/\///;s|\/.*||'
example.com

используйте awk

$ echo $s| awk '{gsub("http://|/.*","")}1'
example.com
5
ответ дан 27 November 2019 в 03:00
поделиться
#!/usr/bin/perl -w
use strict;

my $url = $ARGV[0];

if($url =~ /([^:]*:\/\/)?([^\/]+\.[^\/]+)/g) {
  print $2;
}

Использование:

./test.pl 'https://example.com'
example.com

./test.pl 'https://www.example.com/'
www.example.com

./test.pl 'example.org/'
example.org

 ./test.pl 'example.org'
example.org

./test.pl 'example'  -> no output

И если вам нужен только домен, а не полный хост + домен, используйте это:

#!/usr/bin/perl -w
use strict;

my $url = $ARGV[0];
if($url =~ /([^:]*:\/\/)?([^\/]*\.)*([^\/\.]+\.[^\/]+)/g) {
  print $3;
}
7
ответ дан 27 November 2019 в 03:00
поделиться

Вместо использования regex для этого можно использовать urlparse от python:

 URL=http://www.example.com

 python -c "from urlparse import urlparse
 url = urlparse('$URL')
 print url.netloc"

Вы можете использовать его так или поместить в небольшой скрипт. Однако этот скрипт все еще ожидает действительный идентификатор схемы, а судя по вашему комментарию, он не обязательно указан. Вы можете указать схему по умолчанию, но urlparse ожидает, что netloc будет начинаться с '//' :

url = urlparse('//www.example.com/index.html','http')

Поэтому вам придется добавлять их вручную, т.е.:

 python -c "from urlparse import urlparse
 if '$URL'.find('://') == -1 then:
   url = urlparse('//$URL','http')
 else:
   url = urlparse('$URL')
 print url.netloc"
6
ответ дан 27 November 2019 в 03:00
поделиться
$ URI="http://user:pw@example.com:80/"
$ echo $URI | sed -e "s/[^/]*\/\/\([^@]*@\)\?\([^:/]*\).*/\2/"
example.com

смотрите http://en.wikipedia.org/wiki/URI_scheme

16
ответ дан 27 November 2019 в 03:00
поделиться

Следующее будет выводить "example.com":

URI="http://user@example.com/foo/bar/baz/?lala=foo" 
ruby -ruri -e "p URI.parse('$URI').host"

Для получения дополнительной информации о том, что вы можете делать с классом URI Ruby вам придется обратиться к документации .

3
ответ дан 27 November 2019 в 03:00
поделиться
basename "http://example.com"

Конечно, это не будет работать с таким URI: http://www.example.com/index.html , но вы можете сделать следующее:

basename $(dirname "http://www.example.com/index.html")

Или еще сложные URI:

echo "http://www.example.com/somedir/someotherdir/index.html" | cut -d'/' -f3

-d означает «разделитель», а -f означает «поле»; в приведенном выше примере третье поле, разделенное косой чертой '/', - это www.example.com.

18
ответ дан 27 November 2019 в 03:00
поделиться

С Ruby вы можете использовать библиотеку Domainatrix / gem

http://www.pauldix.net/2009/12/parse-domains-from-urls-easy-with-domainatrix.html

require 'rubygems'
require 'domainatrix'
s = 'http://www.champa.kku.ac.th/dir1/dir2/file?option1&option2'
url = Domainatrix.parse(s)
url.domain
=> "kku"

отличный инструмент! :-)

0
ответ дан 27 November 2019 в 03:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: