Не могли бы вы попробовать следующее.
echo "Core 0: +53.0°C (high = +80.0°C, crit = +100.0°C)" |
sed 's/[^+]*+\([^ ]*\).*/\1/'
ИЛИ, если вы не хотите выводить °
, попробуйте следующее.
echo "Core 0: +53.0°C (high = +80.0°C, crit = +100.0°C)" |
sed 's/[^+]*+\([^°]*\).*/\1/'
Объяснение приведенного выше кода:
Я использовал sed
возможность сохранения сопоставленного регулярного выражения во временную буферную память и дал ему ссылку как \1
, чтобы распечатать его позже.
Следующее объяснение предназначено только для объяснения целей использования кода выше кода, пожалуйста.
sed ' ##Starting sed program here.
s ##Using s option for substitution method by sed on Lines of Input_file.
/[^+]*+ ##Using regex to have till 1st occurrence of + here.
\([^ ]*\) ##Using memory buffer saving capability of sed to save matched regex in it.
##Have used regex to match everything till occurrence of space. Which should catch 1st temperature.
.* ##Mentioning .* to match all rest line.
/\1/' ##Now substituting whole line with 1st buffer matched value.
Объяснение, почему код OP не работает: Поскольку OPв своей попытке использует .*+
, что соответствует ЖАДОМУ совпадению , поэтому оно соответствует последнему вхождению +
, таким образом, оно дает последнее значение температуры.
Примечание: добавленоссылка предоставлена Sundeep Sir в комментариях для понимания жадных матчей.