Подтвердить что ты не робот

Извлекать доменное имя из URL-адреса

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

4b9b3361

Ответ 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;
}

Ответ 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

Ответ 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