Как извлечь доменное имя из URL с помощью bash? например: http://example.com/ на example.com должен работать для любого tld, а не только .com
Извлекать доменное имя из URL-адреса
Ответ 1
Вы можете использовать простой способ AWK для извлечения имени домена следующим образом:
echo http://example.com/index.php | awk -F/ '{print $3}'
ВЫХОД: example.com
: -)
Ответ 2
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.
Ответ 3
#!/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;
}
Ответ 4
$ URI="http://user:[email protected]:80/"
$ echo $URI | sed -e "s/[^/]*\/\/\([^@]*@\)\?\([^:/]*\).*/\2/"
example.com
Ответ 5
Вместо использования regex для этого вы можете использовать python urlparse:
URL=http://www.example.com
python -c "from urlparse import urlparse
url = urlparse('$URL')
print url.netloc"
Вы можете либо использовать его так, либо поместить его в маленький script. Однако это все еще ожидает действительный идентификатор схемы, глядя на ваш комментарий, ваш ввод не обязательно обеспечивает его. Вы можете указать схему по умолчанию, но 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
есть так мало информации о том, как вы получаете эти 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
Ответ 7
Следующее выведет "example.com":
URI="http://[email protected]/foo/bar/baz/?lala=foo"
ruby -ruri -e "p URI.parse('$URI').host"
Для получения дополнительной информации о том, что вы можете сделать с классом Ruby URI, вам нужно проконсультироваться документы.
Ответ 8
echo $URL | cut -d'/' -f3 | cut -d':' -f1
Работает для URL-адресов:
http://host.example.com
http://host.example.com/hi/there
http://host.example.com:2345/hi/there
http://host.example.com:2345
Ответ 9
sed -E -e 's_.*://([^/@]*@)?([^/:]+).*_\2_'
например.
$ sed -E -e 's_.*://([^/@]*@)?([^/:]+).*_\2_' <<< 'http://example.com'
example.com
$ sed -E -e 's_.*://([^/@]*@)?([^/:]+).*_\2_' <<< 'https://example.com'
example.com
$ sed -E -e 's_.*://([^/@]*@)?([^/:]+).*_\2_' <<< 'http://example.com:1234/some/path'
example.com
$ sed -E -e 's_.*://([^/@]*@)?([^/:]+).*_\2_' <<< 'http://user:[email protected]:1234/some/path'
example.com
$ sed -E -e 's_.*://([^/@]*@)?([^/:]+).*_\2_' <<< 'http://user:[email protected]:1234/some/path#fragment'
example.com
$ sed -E -e 's_.*://([^/@]*@)?([^/:]+).*_\2_' <<< 'http://user:[email protected]:1234/some/path#fragment?params=true'
example.com
Ответ 10
Одно решение, которое будет охватывать больше случаев, будет основано на sed regexps:
echo http://example.com/index.php | sed -e 's#^https://\|^http://##' -e 's#:.*##' -e 's#/.*##'
Это будет работать для URL-адресов, таких как:
http://example.com/index.php, http://example.com:4040/index.php, https://example.com/index.php
Ответ 11
С Ruby вы можете использовать библиотеку /gem Domainatrix
http://www.pauldix.net/2009/12/parse-domains-from-urls-easily-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"
отличный инструмент!: -)
Ответ 12
Здесь node.js, он работает с или без портов и глубоких путей:
//get-hostname.js
'use strict';
const url = require('url');
const parts = url.parse(process.argv[2]);
console.log(parts.hostname);
Может быть вызван как:
node get-hostname.js http://foo.example.com:8080/test/1/2/3.html
//foo.example.com
Документы: https://nodejs.org/api/url.html