Как я извлекаю доменное имя из URL с помощью удара? как: http://example.com/ на example.com должен работать на любой tld, не просто .com
очень мало информации о том, как вы получаете эти 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
#!/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;
}
Вместо использования 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"
$ URI="http://user:pw@example.com:80/"
$ echo $URI | sed -e "s/[^/]*\/\/\([^@]*@\)\?\([^:/]*\).*/\2/"
example.com
Следующее будет выводить "example.com":
URI="http://user@example.com/foo/bar/baz/?lala=foo"
ruby -ruri -e "p URI.parse('$URI').host"
Для получения дополнительной информации о том, что вы можете делать с классом URI Ruby вам придется обратиться к документации .
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.
С 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"
отличный инструмент! :-)