Perso je ferai ça :
sensors | grep 'Core [0-9]:' | sed -e 's/[^+]*+//;s/[^0-9].*//' | sort -n | tail -n 1L’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.

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 | choseEt 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.