Extraire la partie principale d'un nom de domaine avec sed

Bonjour,

Je cherche à isoler la partie principale de plusieurs noms de domaine.

http://montest.be/
https://www.autretest.com/blabla
www.art.be
test.fr

Je voudrais récupérer :

montest
autretest
art
test

J’ai réussis à obtenir quelque chose qui marche mais ça ne me semble pas très “propre”…

$ cat domaines.txt 
http://montest.be/
https://www.montest.be
http://monautretest.com/blabla
test.fr
$ cat domaines.txt | sed -e "s/http\:\/\///" -e "s/https\:\/\///" -e "s/www\.//" -e "s/\..*//"
montest
montest
monautretest
test

Est-il possible de faire la même chose plus élégamment ? :slight_smile:

[Edit: j’ai réussis à concaténer http et https :

$ cat domaines.txt | sed -e "s/\(http\|https\)\:\/\///" -e "s/www\.//" -e "s/\..*//"
montest
montest
monautretest
test

Mais il doit y avoir moyen de faire mieux, bien mieux.

Le mieux est l’ennemi du bien

sed -re 's/https?:\/\/|(www.)?|\..*//g'

Je ne garantie pas que c’est la meilleure solution mais elle fonctionne aussi.

Question bête : pourquoi vouloir faire ça ?

Ne garder que la fin pour identifier vraiment le domaine, pourquoi pas (mais en gardant le TLD donc montest.be par exemple pour éviter l’usurpation de domaine), mais ça me semble compliqué…

Et quid des URL suivantes :
http://www.nic.pwc/


ftp://user@actux.eu.org/
http://pierre.fritsch.free.fr/blog/

Pour la commande en sed pour faire ça, par contre, je ne veux pas savoir ce soir ;-D

Pas besoin de faire ‘cat fichier | sed traitement’ … normalement, juste ‘sed traitement fichier’ suffit ! :wink:

Merci à tous pour vos réponses. :slight_smile:

@debianhadic: Tu veux dire qu’il vaut mieux que la commande soit un peu longue mais bien claire plutôt que courte et dure à lire ?

@David_5.1: J’ai mis en place des certificats Let’s Encrypt pour les deux sites que je gère actuellement en me basant sur le le tutoriel de sysnove.

J’ai cependant fait un petit peu autrement et je me retrouve donc à devoir modifier un peu le script qu’ils donnent. J’utilise acme-tiny qui crée un fichier temporaire pour vérifier le site.

Au départ, il écrit dans ce dossier :

acme_dir=/srv/www/acme-challenges

Et moi j’ai besoin qu’il écrive dans /var/www/domaine1/.well-known/acme-challenge/ et /var/www/domaine2/.well-known/acme-challenge/ .

J’ai donc modifié le script en récupérant la variable “$domain” (www.domaine1.be) pour récupérer la partie qui m’intéresse (domaine1) :

domaine_reduit=`echo $domain | sed -e "s/www\.//" -e "s/\..*//"`
acme_dir=/var/www/$domaine_reduit/.well-known/acme-challenge

Je ne sais pas si c’est très “propre” mais ça marche. Dans la foulée, j’étais curieux de voir comment utiliser sed pour d’autres cas (avec http, https, avec des sous-domaines, …) mais c’était plus par curiosité intellectuelle. :slight_smile:

@PengouinPdt: Bien vu, j’y penserai pour la prochaine fois.