1

yop,

Suite à ma mésaventure d'hier, j'ai fait une refonte d'un thme superkaramba que j'utilise depuis des lustres : virage de tout ce qui est inutile, mais ajout des températures CPU.
Pour celà, j'utilise sensors dont voici la sortie :
folco@Weygand:~$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +34.0°C  (high = +85.0°C, crit = +105.0°C)
Core 0:         +29.0°C  (high = +85.0°C, crit = +105.0°C)
Core 1:         +26.0°C  (high = +85.0°C, crit = +105.0°C)
Core 2:         +34.0°C  (high = +85.0°C, crit = +105.0°C)
Core 3:         +30.0°C  (high = +85.0°C, crit = +105.0°C)
Mon idée, c'est de vouloir récupérer le "29" de la ligne Core 0 : pas de signe +, pas de décimale, pas d'unité.
Je ne connais que cut pour trifouiller les sorties, j'ai écrit ça : sensors | grep Core\ 0 | cut -f 11 -d\
Et ça marche presque, je récupère "+29.0°C".

Question : comment faire pour élager encore, ie virer le signe, la partie décimale et l'unité ? Merci de m'aider, ok j'avoue j'ai la flemme de me plonger dans les expressions rationnelles pour une connerie comme ça grin

2

sensors | sed 's/Core\ 0:[ \t]*+\([0-9]*\)\..*/\1/' devrais fonctionner.
Peace Unity Love et Having Fun!!!

3

Merci bien.
Seulement, ça donne ça : folco@Weygand:~$ sensors | sed 's/Core\ 0:[ \t]*+\([0-9]*\)\..*/\1/'
coretemp-isa-0000
Adapter: ISA adapter
Physical id 0: +35.0°C (high = +85.0°C, crit = +105.0°C)
29
Core 1: +31.0°C (high = +85.0°C, crit = +105.0°C)
Core 2: +35.0°C (high = +85.0°C, crit = +105.0°C)
Core 3: +30.0°C (high = +85.0°C, crit = +105.0°C)[/pre]
J'imagine qu'il manque un simple grep du coup ?
Parce que ça, ça marche : sensors | grep Core\ 0 | sed 's/Core\ 0:[ \t]*+\([0-9]*\)\..*/\1/'
A moins que ta ligne de sed soit déjà sensée faire ça ?

En tout cas, merci beaucoup. smile

4

sensors | sed -n 's/Core\ 0:[ \t]*+\([0-9]*\)\..*/\1/p'
So much code to write, so little time.

5

sensors | grep "Core 0" | sed -E 's/^Core 0: ?([0-9][0-9][0-9]?)\..*$/\1/g'
mais on peut sûrement faire mieux (je ne connais pas trop les regex autorisées par sed)
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

6

Merci beaucoup à vous, j'ai pas testé le tien flan, mais celui de nitro fonctionne impec smile
Ca donne ça :

v9C3

Demain, j'y rajouterai date et heure, et je pourrai virer définitivement le petit bout de barre en bas à droite. smile

7

Perso je ferai ça :

sensors | grep 'Core [0-9]:' | sed -e 's/[^+]*+//;s/[^0-9].*//' | sort -n | tail -n 1
L’idée c’est de lire toutes les températures Core puis de supprimer tout ce qui n’est pas un + avant un +, ainsi tu ne vires que ce qu’il y a avant le premier + et pas tout ce qu’il y a avant le dernier +, ensuite, de ce qui reste, tu supprimes tout ce qu’il y a après un caractère qui n’est pas un chiffre, ce caractère compris, donc tout ce qu’il y a à partir du premier point/espace/° si jamais sensors te sortait un entier ou du texte ASCII etc.. Le sort | tail -n tu permets de ne conserver que la valeur la plus élevées de toutes tes températures Core. Tu peux faire sort -rn | tail -n 1 ou sort -n | head -n 1 pour récupérer la température la plus basse.

Et si tu tiens absolument aux parenthèses capturantes :

sensors | grep 'Core [0-9]:' | sed -e 's/[^+]*+\([0-9]*\)[^0-9].*/\1/' | sort -n | tail -n 1
Ça part bien entendu du principe que la température de ton CPU est positive, et que tu n’as pas plus de 10 sondes de température de cœur sur un même CPU et que tu n’as qu’un seul CPU. tripo

Si t’as pas confiance dans la présence du + (exemple sans parenthèse capturante, puis avec):

sensors | grep 'Core [0-9]:' | sed -e 's/[^:]://;s/[^0-9]*//;s/[^0-9].*//' | sort -n | tail -n 1
sensors | grep 'Core [0-9]:' | sed -e 's/[^:]*:[^0-9]*\([0-9]*\)[^0-9].*/\1/' | sort -n | tail -n 1

Ainsi tu supprimes tout ce qui précède le premier : inclus, et à partir de là, tu ne testes plus que la présence ou l’absence de chiffre, ce qui est assez sûr.

Je voudrais pointer le fait que le ° n’est affiché que dans les locales UTF-8, ce qui est un bon exemple pour montrer qu’il pourrait y avoir d’autres subtilités encore dans le texte que tu parses. Donc de manière générale, c’est recommandé de mettre une locale comme C.UTF-8 avant tout traitement pour éviter les problèmes de localisation (utiliser C pour de l’ASCII), ceci devrait marcher partout pareil sur un système moderne (configurée ainsi, la locale n’est utilisée que pour cette commande) :

LANG='C.UTF-8' sensors | truc | machin | chose
Et si comme moi tu ne testes que des trucs qui ne sont pas sensés être variables (comme le : et les chiffres), tu devrais avoir un code robuste. Il t’est aussi possible de configurer lm-sensors pour renommer tes lignes Core à ta guise. Tu peux aussi t’amuser avec sensors -u.
avatar
† In te confirmátus sum ex útero : de ventre matris meæ tu es protéctor meus.
illwieckz.net ~ Unvanquished ~ gg.illwieckz.net { le frag courtois } ~ NetRadiant