Regex 将cpu温度存储在变量中
我试图从Linux shell命令中提供的lm sensors解析出温度信息:Regex 将cpu温度存储在变量中,regex,linux,awk,grep,temperature,Regex,Linux,Awk,Grep,Temperature,我试图从Linux shell命令中提供的lm sensors解析出温度信息:$sensors 我怀疑我把这件事搞得太糊涂了。第一:CPU温度是否存在预先存在的环境变量或其他因素 我尝试使用以下命令: $ sensors -A -f | awk '{print $2}' +136.4°F 但我得到了一些不想要的空白,和一些不想要的其他字符。比如+。度符号,F 然后我试着用以下方法将数字变灰: sensors-A-f | awk'{print$2}'| egrep-o[0-9]\.?[0-9]
$sensors
我怀疑我把这件事搞得太糊涂了。第一:CPU温度是否存在预先存在的环境变量或其他因素
我尝试使用以下命令:
$ sensors -A -f | awk '{print $2}'
+136.4°F
但我得到了一些不想要的空白,和一些不想要的其他字符。比如+。度符号,F
然后我试着用以下方法将数字变灰:
sensors-A-f | awk'{print$2}'| egrep-o[0-9]\.?[0-9]
但每次,我都会得到小数点前的数字,但我似乎无法得到小数点后的数字
我要做的就是将系统cpu温度放入一个变量中。这是最好的路线吗?请帮助我获取cpu温度
更新:
sensors-A-f | awk'{print$2+0}'
0
77
0
它将空格替换为0,但仍然不会给出小数点后的数字。您的正则表达式匹配一个单位数、一个(可选)小数点,然后是另一个单位数 试试这个正则表达式:
[0-9]+(\.[0-9]+)?
这将匹配多个数字,后跟一个小数点和更多数字。注意“+”
表示“一个或多个”和(…)
组
(为了完整起见,您可能应该在正则表达式中包含一个前导的
'-'
,但不知何故,我认为您不太可能在实践中看到这一点。)您的正则表达式匹配一个单位数字、一个(可选)十进制小数点,然后是另一个单位数字
试试这个正则表达式:
[0-9]+(\.[0-9]+)?
这将匹配多个数字,后跟一个小数点和更多数字。注意“+”
表示“一个或多个”和(…)
组
(为了完整起见,您可能应该在正则表达式中包含一个前导的
'-'
,但不知何故,我认为您不太可能在实践中看到这一点。)如果python适合您
import subprocess
p1 = subprocess.Popen(["sensors"], stdout=subprocess.PIPE)
output = p1.communicate()
A = output[0]
temp = float(A[56:60])
输出:
In [10]: temp
Out[10]: 57.0
如果python适合你
import subprocess
p1 = subprocess.Popen(["sensors"], stdout=subprocess.PIPE)
output = p1.communicate()
A = output[0]
temp = float(A[56:60])
输出:
In [10]: temp
Out[10]: 57.0
通常,当您已经在使用awk时,不需要使用
grep
。您的命令可能简化为:
sensors -A -f | awk '{print $2+0}'
测试:
通常,当您已经在使用awk时,不需要使用
grep
。您的命令可能简化为:
sensors -A -f | awk '{print $2+0}'
测试:
试试这个:
export LC_ALL=C
sensors -A -f | awk 'NF{print $2+0}'
我怀疑您遇到的问题是,默认区域设置使用逗号而不是句点来分隔数字
如果不是这样的话,请按照已经多次提出的要求,更新您的问题,以显示系统上传感器-a-f的输出,让我们有机会为您提供帮助。尝试以下方法:
export LC_ALL=C
sensors -A -f | awk 'NF{print $2+0}'
我怀疑您遇到的问题是,默认区域设置使用逗号而不是句点来分隔数字
如果不是这样的话,那么按照已经多次提出的要求,请更新您的问题,以在您的系统上显示传感器-A-f的输出,让我们有机会为您提供帮助。您是否可以使用传感器-A-f的输出和要提取的零件更新问题?复制命令
传感器-A-f
,在命令提示符下执行,复制输出,单击问题下的,粘贴输出,选择输出,按Ctrl+K,然后单击保存编辑。@j0h:有关更新,请参阅更新的ASN。是否使用传感器-A-f
的输出和要提取的零件更新问题?复制命令传感器-A-f
,在命令提示符下执行,复制输出,单击问题下的,粘贴输出,选择输出,按Ctrl+K,然后单击保存编辑。@j0h:有关更新,请参阅updated AsnVeraldo single quote the argument of egrep,否则将进行文件名扩展,如。|egrep-o'[0-9]+(\.[0-9]+)?'
还可以单引号引用egrep的参数,否则它将受到文件名扩展的影响,如。|白鹭-o'[0-9]+(\[0-9]+)?'
+1;利用awk
将以数字表示形式开头的任何内容解释为数字上下文中的数字(强制使用+0
)。要同时忽略空行,请使用awk'$0!=“{打印2美元+0 } /代码> .@ MKLMunt0来忽略空白行,您应该做代码> AWK 'NF{打印2美元+0 } < /Cord> @ JayPal:好点,谢谢(<代码> $0!=)只忽略真正的空行,而<代码> NF(或<代码> NF> 0 < /代码>)忽略空行-即空或所有空白线)+1;利用awk
将以数字表示形式开头的任何内容解释为数字上下文中的数字(强制使用+0
)。要同时忽略空行,请使用awk'$0!=“{打印2美元+0 } <代码> .@ MKLMunt0忽略空白行,您应该做代码> AWK 'NF{打印2美元+0 } < /Calp> @ JayPal:好点,谢谢(<代码> $0!=)只忽略真正的空行,而<代码> NF(或<代码> NF> 0 < /代码>)忽略空白行(即空的或空白的所有行)。