IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

Comment extraire le nom host d'un adresse DNS


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    Par défaut Comment extraire le nom host d'un adresse DNS
    Bonjour à tous,

    J'ai essayé de comprendre l'expression régulière mais en vain, j'y n'arrive pas.

    Je me demande comment extraire l'adresse du hostname, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $variable_snmp = "3750X.mon.domaine.reseaux.fr";
    ??????
    $resultat_host = "3750X";
    En clair, je voudrais prendre le premier mot avant le point.

    Merci de m'aider.

    Je vous souhaite une très bonne we.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 605
    Par défaut
    Bonjour,

    en étant trivial par rapport à ton exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $variable_snmp = "3750X.mon.domaine.reseaux.fr";
     
    $resultat_host = $1 if ($variable_snmp =~ /^(.[^.]+)\..+/);
     
    print "$resultat_host\n";
    Mon expression régulière repose sur la recherche en début de chaîne de toute suite de caractère ne contenant pas le caractère . suivie d'un . justement

    Autre méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $variable_snmp = "3750X.mon.domaine.reseaux.fr";
     
    $resultat_host = shift((split(/\./, $variable_snmp)));
     
    print "$resultat_host\n";

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    Par défaut
    Merci beaucoup, et ça marche.

  4. #4
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Bonjour,

    Citation Envoyé par SkyDev
    Je me demande comment extraire l'adresse du hostname, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $variable_snmp = "3750X.mon.domaine.reseaux.fr";
    ??????
    $resultat_host = "3750X";
    En clair, je voudrais prendre le premier mot avant le point.
    Le ., on l'exprime "\." car il a sinon une signification particulière.

    Un mot, c'est constitué de caractères de mots exprimés "\w".
    Si l'on en veut plusieurs (caractères), mais au moins un, il faut noter "\w+".
    Si l'on veut éviter de prendre le maximum de caractères, il faut préciser au + de s'arrêter dès que possible (selon la suite du motif) : "\w+?".
    Le mot avant un point, c'est donc "\w+?\.".

    Eventuellement, on peut préciser que l'on prend tout ça à partir du début de chaine : "^\w+?\." mais ça me paraît superflu.

    On ajoute des parenthèses pour mémoriser ce que l'on veut (le mot, sans le point) : "(\w+?)\.".

    Et on met tout ça en musique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $variable_snmp = "3750X.mon.domaine.reseaux.fr";
    ($resultat_host) = ($variable_snmp =~ m/(\w+?)\./);
    Je n'ai pas testé, mais on doit être proche du but.

    [Edit]
    Je suis trop lent ... et Arioch a une bonne solution aussi. En Perl, il y a toujours plus d'une façon de le faire.
    [/Edit]

    [Edit 2]
    Testé et fonctionnel !
    [/Edit]

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 605
    Par défaut
    Par contre ma méthode avec split fonctionne pas (la 2è)

  6. #6
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Citation Envoyé par Arioch
    Par contre ma méthode avec split fonctionne pas (la 2è)
    Essaie comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $variable_snmp = "3750X.mon.domaine.reseaux.fr";
     
    $resultat_host = (split(/\./, $variable_snmp))[0];
     
    print "$resultat_host\n";

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 605
    Par défaut
    Merci du tuyau

    Par contre, syntaxiquement parlant, mon approche aurait dû fonctionner, me gourre-je ?

    shift extrait un élément d'une liste
    la liste ici est composé de tous les éléments de la chaine splités via le .

    Je pensais (bêtement) qu'on pouvait assigner à notre variable réceptrice le résultat combiné du shift de la liste splitée. On restait dans le contexte scalaire.

    Bizarre.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 163
    Par défaut
    Encore une chose, si j'ai envie d'extraire le nom d'un hostname au milieu du texte d'une variable comme par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $service_description = "GigabitEthernet1/8 Link to 3750X_Gi1/0/2";
    ???
    $resultat = "3750X";
    Encore merci pour votre aide, et pouquoi pas intégrer ces deux exemples dans le FAQ du perl?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Comment extraire le nom du fichier
    Par ziko.1988 dans le forum Scripts/Batch
    Réponses: 13
    Dernier message: 14/07/2010, 11h00
  2. comment extraire le nom de fichier à partir d'un chemin?
    Par salimo79 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/07/2010, 03h58
  3. Réponses: 3
    Dernier message: 21/05/2008, 18h24
  4. Comment extraire le dernier numéro d'une adresse IP ?
    Par looping dans le forum Langage
    Réponses: 2
    Dernier message: 19/12/2007, 20h55
  5. Réponses: 4
    Dernier message: 27/06/2005, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo