Ubuntu 尝试使用sed将温度从传感器命令转换为数字

Ubuntu 尝试使用sed将温度从传感器命令转换为数字,ubuntu,sed,Ubuntu,Sed,我有一个使用“tempmonitor”为OSX编写的脚本,我正试图将其转换为Ubuntu下的lm传感器 这是原始OS X脚本,读取XServe入口上的环境传感器温度: #!/bin/bash /Users/admin/TemperatureMonitor.app/Contents/MacOS/tempmonitor -f -a -l | grep AMBIENT > /tmp/temperature.txt filecontent=( `cat "/tmp/temperatur

我有一个使用“tempmonitor”为OSX编写的脚本,我正试图将其转换为Ubuntu下的lm传感器

这是原始OS X脚本,读取XServe入口上的环境传感器温度:

#!/bin/bash

/Users/admin/TemperatureMonitor.app/Contents/MacOS/tempmonitor -f -a -l | grep AMBIENT > /tmp/temperature.txt

    filecontent=( `cat "/tmp/temperature.txt" `)

    temp1=`echo "${filecontent[3]} * 10 "|bc | sed 's/[.].*//'`
    temp2=`echo "${filecontent[10]} * 10 "|bc | sed 's/[.].*//'`


    if  (( $temp1 >= 900 || $temp2 >= 900 )); then
            EMAIL="network.services@domain.com"
            SUBJECT="MAIL01 INLET TEMPERATURE EXCEEDED!"
            mail -s "$SUBJECT" "$EMAIL" < /tmp/temperature.txt
    fi
在前面,我只需要处理一个小数点,因此在读取每行输出后,sed代码将读取:

temp1=`echo "${filecontent[1]}"|bc | sed 's/[.].*//'`
但在这里,我需要去掉+符号、学位符号、大写字母C以及导致大写字母A的任何东西。我尝试过:

temp1=`echo "${filecontent[1]}"|bc | sed 's/[+.°C].*//'`
但我有一些错误:

(standard_in) 1: syntax error
(standard_in) 1: illegal character: \302
(standard_in) 1: illegal character: \260
我应该在sed脚本中输入什么来获得我想要的输出,即740、510和254?或者我应该忘记编写自己的温度传感器通知脚本并找到其他东西(因为最终这就是它的用途)

更新:根据这里的一些反馈,我在家用笔记本电脑上从头开始创建了一个新文件,运行Sabayon 13.04:

#!/bin/bash

# define email headers
SUBJECT="LAPTOP SENSOR TEMPERATURE EXCEEDED!"
RECIPIENTS="john@net.net"

temp1=`sensors | grep -i temp3 | grep -o '+[0-9.]\+' | sed '1~2!d; s/+//'`
temp2=`echo "$temp1 * 10" | bc | sed 's/[.].*//'`

if (( temp2 >= 330 )); then
echo "EMAIL ALERT TRIGGERED!"
#mail -s "$SUBJECT" $RECIPIENTS < $OUTFILE 
fi  
#/bin/bash
#定义电子邮件标题
主题=“超过笔记本电脑传感器温度!”
收件人=”john@net.net"
temp1=`sensors | grep-i temp3 | grep-o'+[0-9.]\+''sed'1~2!Ds/+/'`
temp2=`echo“$temp1*10”| bc|sed's/[.].*/'`
如果((temp2>=330));然后
echo“已触发电子邮件警报!”
#邮件-s“$SUBJECT”$RECIPIENTS<$OUTFILE
fi

变量temp1的结果为24.0(摄氏度)。然后我可以将它乘以10,得到temp240,将其与330进行比较,因为温度较低,所以不会触发任何事件。这在Xubuntu上也有效,无需修改!我认为我在垃圾角色上遇到的麻烦应该归咎于Windows8上的油灰,而不是我在工作中使用的Xubuntu系统。谢谢大家的帮助和指点

这只输出数字:

sensors | grep -o '+[0-9.]\+' | sed '1~2!d; s/+//'

grep部分仅打印前面有
+
的浮点数,而sed部分删除每一第二行并删除
+
输出为UTF-8,解释为ISO 8859-1;这就是“度”的来源

使用
sed
,我可能会使用:

sed 's/^.*:[^0-9]*+\([0-9]*\)\.\([0-9]\).*/\1\2/'
该模式查找冒号、一系列非数字、加号(如果可以处理冰冻温度,也可以选择使用
[-+]
查找负数),然后记住一系列数字,匹配一个点,并记住另一个数字,后跟任何数字;它将用记住的数字替换该数字。

GNU sed >sed-n'/^temp.*/s/[.].*/;s/+//p'文件 temp1:74 时间2:51 时间3:25
看起来像是字符编码问题…请检查您的终端设置。
|bc |
用于什么?我怀疑是,不是sed,这是投诉请(a)在不破坏原始信息的情况下将完整脚本复制到问题中,然后(b)删除包含脚本的注释,以及(c)将此注释标记为过时。你可以也应该在适当的时候更新你的问题,记住不要破坏人们在答案中已经讨论过的内容。(如果你需要添加注释,一定要这样做。)当我回到办公室,把Ubuntu的盒子放在附近的时候,我要试试这个;我在家里运行一个不同的Linux——“传感器”仍然可以工作,但我没有得到ISO 8859-1输出。谢谢你,乔纳森!这样我就不用写文件了,真的很酷,谢谢!
sensors | grep -o '+[0-9.]\+' | sed '1~2!d; s/+//'
sed 's/^.*:[^0-9]*+\([0-9]*\)\.\([0-9]\).*/\1\2/'
>sed -n '/^temp.*/ s/[.].*//;s/+//p' file temp1: 74 temp2: 51 temp3: 25