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

Langage Perl Discussion :

Regex (encore ..)


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Par défaut Regex (encore ..)
    Bonsoir
    Et oui ! encore une question sur ces fameuses regex's :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $TempCpu = `sensors | grep "Core" | tr "\n" " " | sed -re 's/ {2,}/ /g'`;
    # > Core 0: +51.0°C (high = +105.0°C, crit = +105.0°C) Core 1: +53.0°C (high = +105.0°C, crit = +105.0°C)
    $TempCpu =~ s/\s*(Core)\s*(\d{1}).*(: \+\d{2})\.\d{1}(°C).*/$1$2$3$4/g;
    # > Core0: +51°C
    Je voudrais, en fait, récupérer les températures de tout les Core's.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Hum
    ta première ligne c'est du shell plus que du Perl. Franchement, Perl t'offre un contrôle beaucoup plus fin du résultat.
    Pour ta troisième ligne, ne fait-elle pas ce que tu souhaites? Ou as-tu un message d'erreur? Peux-tu fournir précisément la ligne en entrée et le résultat souhaité.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 84
    Par défaut
    perso, j'aurai pensé différemment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach my $core (split(/\n/, `sensors | grep "Core" | sed -re 's/ {2,}/ /g'`; )){  #a voir si ça fonctionne sans la cmde sed
       $core =~ s/\s*(Core)\s*(\d{1}).*(: \+\d{2})\.\d{1}(°C).*/$1$2$3$4/g;
       print "Core :: $core\n";
    }
    on récupère toujours la commande qui n'est pas du perl, mais qui doit être du sh ou du ksh
    on garde le saut de ligne pour appeler facilement la fonction split
    puis on affiche les températures de chaque core


    je l'ai testé avec ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/perl -w
    my $st = "Core 0: +51.0°C (high = +105.0°C, crit = +105.0°C)\nCore 1: +53.0°C (high = +105.0°C, crit = +105.0°C)";
    foreach my $core (split(/\n/, $st)){
       $core =~ s/\s*(Core)\s*(\d{1}).*(: \+\d{2})\.\d{1}(°C).*/$1$2$3$4/g;
       print "$core\n";
    }

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Pourrais-tu :
    - nous donner un exemple de ce que retourne "sensors" (sans aucune manipulation shell), car comme dis lolo, si tu utilises perl pour faire un traitement, autant tout faire avec (et limiter au maximum le contenu de la commande shell)
    - préciser si tu ne veux que la température du Core 0 ou si tu veux aussi celle du Core 1 ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Par défaut
    Bonjour et merci pour vos réponses.

    alors, la sortie de 'sensors' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ~$ sensors
    coretemp-isa-0000
    Adapter: ISA adapter
    Core 0:       +43.0°C  (high = +105.0°C, crit = +105.0°C)
    Core 1:       +44.0°C  (high = +105.0°C, crit = +105.0°C)
    en fait, ce qui m'interesse c'est "Core 0: +43.0)C" ET "Core 1: +44.0°C", le reste pas besoin.
    Apres si vous avez des solution en pure Perl sans passer par le shell, ça serais largement mieux .

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Si tu n'as pas besoin d'utiliser le résultat dans un script perl par la suite, une solution rapide est d'utiliser awk dans le terminal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sensors | awk '/^Core/{print $1 $2" "$3}'
    L'équivalent en une ligne de commande perl avec l'autosplit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sensors | perl -lane 'print "$F[0] $F[1] $F[2]" if /^Core/'

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

Discussions similaires

  1. [RegEx] Encore les regex
    Par Joelindien dans le forum Langage
    Réponses: 8
    Dernier message: 03/04/2009, 19h26
  2. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  3. [RegEx] regex simple qui ne marche pas (encore)
    Par denisvignes dans le forum Langage
    Réponses: 5
    Dernier message: 19/09/2008, 15h04
  4. [Regex] encore un ^^
    Par messinese dans le forum Langage
    Réponses: 6
    Dernier message: 03/03/2008, 15h47
  5. TPalette (encore)
    Par Flipper dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2002, 23h45

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