Comment extraire le nom de domaine d'une URL à l'aide de bash? Comme: http://example.com/ to example.com Doit fonctionner pour tout tld, pas seulement pour .com
Vous pouvez utiliser un moyen AWK simple pour extraire le nom de domaine de la manière suivante:
echo http://example.com/index.php | awk -F[/:] '{print $4}'
SORTIE: example.com
:-)
basename "http://example.com"
Bien entendu, cela ne fonctionnera pas avec un URI comme celui-ci: http://www.example.com/index.html
mais vous pouvez effectuer les opérations suivantes:
basename $(dirname "http://www.example.com/index.html")
Ou pour les URI plus complexes:
echo "http://www.example.com/somedir/someotherdir/index.html" | cut -d'/' -f3
-d signifie "délimiteur" et -f signifie "champ"; Dans l'exemple ci-dessus, le troisième champ délimité par la barre oblique "/" est www.example.com.
$ URI="http://user:[email protected]:80/"
$ echo $URI | sed -e "s/[^/]*\/\/\([^@]*@\)\?\([^:/]*\).*/\2/"
example.com
echo $URL | cut -d'/' -f3 | cut -d':' -f1
Fonctionne pour les URL:
http://Host.example.com
http://Host.example.com/hi/there
http://Host.example.com:2345/hi/there
http://Host.example.com:2345
#!/usr/bin/Perl -w
use strict;
my $url = $ARGV[0];
if($url =~ /([^:]*:\/\/)?([^\/]+\.[^\/]+)/g) {
print $2;
}
Usage:
./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
Et si vous voulez juste le domaine et non le domaine complet + hôte, utilisez ceci:
#!/usr/bin/Perl -w
use strict;
my $url = $ARGV[0];
if($url =~ /([^:]*:\/\/)?([^\/]*\.)*([^\/\.]+\.[^\/]+)/g) {
print $3;
}
Au lieu d'utiliser regex pour cela, vous pouvez utiliser urlparse de python:
URL=http://www.example.com
python -c "from urlparse import urlparse
url = urlparse('$URL')
print url.netloc"
Vous pouvez soit l'utiliser comme ceci ou le mettre dans un petit script. Cependant, cela attend toujours un identifiant de schéma valide. En regardant votre commentaire, votre saisie n'en fournit pas nécessairement un. Vous pouvez spécifier un schéma par défaut, mais urlparse s'attend à ce que le netloc commence par '//'
:
url = urlparse ('// www.example.com/index.html','http')
Vous devrez donc les ajouter manuellement, c'est-à-dire:
python -c "from urlparse import urlparse
if '$URL'.find('://') == -1 then:
url = urlparse('//$URL','http')
else:
url = urlparse('$URL')
print url.netloc"
sed -E -e 's_.*://([^/@]*@)?([^/:]+).*_\2_'
par exemple.
$ 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
Ce qui suit va générer "example.com":
URI="http://[email protected]/foo/bar/baz/?lala=foo"
Ruby -ruri -e "p URI.parse('$URI').Host"
Pour plus d'informations sur ce que vous pouvez faire avec la classe URI de Ruby, vous devez consulter la documentation .
il y a si peu d'informations sur la façon dont vous obtenez ces URL ... s'il vous plaît montrer plus d'informations la prochaine fois. Existe-t-il des paramètres dans l'URL, etc., etc., ..., en attendant, une simple manipulation de chaîne pour votre exemple d'URL
par exemple
$ 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
d'autres manières, en utilisant sed (GNU)
$ echo $s | sed 's/http:\/\///;s|\/.*||'
example.com
utiliser awk
$ echo $s| awk '{gsub("http://|/.*","")}1'
example.com
Une solution qui couvrirait plus de cas serait basée sur les expressions rationnelles sed:
echo http://example.com/index.php | sed -e 's#^https://\|^http://##' -e 's#:.*##' -e 's#/.*##'
Cela fonctionnerait pour des URL telles que: http://example.com/index.php, http://example.com:4040/index.php, https://example.com/index.php
Voici la manière de node.js, cela fonctionne avec ou sans ports et chemins profonds:
//get-hostname.js
'use strict';
const url = require('url');
const parts = url.parse(process.argv[2]);
console.log(parts.hostname);
Peut s'appeler comme:
node get-hostname.js http://foo.example.com:8080/test/1/2/3.html
//foo.example.com
Avec Ruby, vous pouvez utiliser la bibliothèque/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"
excellent outil! :-)