使用 grep/regex 获取温度数组

Ale*_*lan 1 linux ubuntu monitoring bash physical-environment

我正在尝试在我的服务器上设置一些基本的温度监控 - (不使用第三方工具)。

我已经在我的 linux 机器上安装了几个库来让传感器在我的服务器上工作,现在我可以使用sensors可能返回如下数据的命令:

asb100-i2c-1-2d
Adapter: SMBus nForce2 adapter at 5500
in0:          +1.79 V  (min =  +1.39 V, max =  +2.08 V)
in1:          +1.79 V  (min =  +1.39 V, max =  +2.08 V)
in2:          +3.34 V  (min =  +2.96 V, max =  +3.63 V)
in3:          +2.96 V  (min =  +2.67 V, max =  +3.28 V)
in4:          +3.06 V  (min =  +2.51 V, max =  +3.79 V)
in5:          +3.06 V  (min =  +0.00 V, max =  +0.00 V)
in6:          +3.04 V  (min =  +0.00 V, max =  +0.00 V)
fan1:        6136 RPM  (min = 2777 RPM, div = 2)
fan2:           0 RPM  (min = 3534 RPM, div = 2)
fan3:           0 RPM  (min = 10714 RPM, div = 2)
temp1:        +37.0°C  (high = +80.0°C, hyst = +75.0°C)
temp2:        +26.5°C  (high = +80.0°C, hyst = +75.0°C)
temp3:         -0.5°C  (high = +80.0°C, hyst = +75.0°C)
temp4:        +25.0°C  (high = +80.0°C, hyst = +75.0°C)
cpu0_vid:    +1.750 V

w83l785ts-i2c-1-2e
Adapter: SMBus nForce2 adapter at 5500
temp1:        +30.0°C  (high = +85.0°C)
Run Code Online (Sandbox Code Playgroud)

然后我意识到我可以通过添加| grep temp到命令的末尾来轻松缩小范围,所以我尝试运行sensors | grep temp,并得到了这个:

temp1:        +37.0°C  (high = +80.0°C, hyst = +75.0°C)
temp2:        +26.5°C  (high = +80.0°C, hyst = +75.0°C)
temp3:         -0.5°C  (high = +80.0°C, hyst = +75.0°C)
temp4:        +25.0°C  (high = +80.0°C, hyst = +75.0°C)
temp1:        +30.0°C  (high = +85.0°C)
Run Code Online (Sandbox Code Playgroud)

我意识到 temp3 显然没有正常运行,所以我修改了我的命令以消除该结果: sensors | grep temp[1,2,4]

temp1:        +36.0°C  (high = +80.0°C, hyst = +75.0°C)
temp2:        +26.5°C  (high = +80.0°C, hyst = +75.0°C)
temp4:        +25.0°C  (high = +80.0°C, hyst = +75.0°C)
temp1:        +30.0°C  (high = +85.0°C)
Run Code Online (Sandbox Code Playgroud)

现在我想把它剪下来,所以我只有一个逗号分隔的字符串,它可能看起来像这样。

+36.0,+26.5,+25.0,+30.0
Run Code Online (Sandbox Code Playgroud)

然后我可以将其设置为每 5/10 分钟将此数据提交到服务器。

如何使用grep或其他命令实现此目的?

Rob*_*ers 5

使用awk

sensors | awk '/temp[124]/ {sub("°C", "", $2); print($2)}'
Run Code Online (Sandbox Code Playgroud)

或逗号分隔:

sensors | awk -v ORS=, '/temp[124]/ {sub("°C", "", $2); print($2)}' | sed 's/,$//'
Run Code Online (Sandbox Code Playgroud)