我现在已经浏览和搜索了很长一段时间,我尝试了几种方法 但我似乎做错了什么。
我正在从/ sys / bus / devices / w1 / ...中读取输出,如下所示:
46 01 4b 46 7f ff 0a 10 85 : crc=85 YES
46 01 4b 46 7f ff 0a 10 85 t=20375
我只对“20375”感兴趣(如果有人关心,则等于20.375°C)
我用过:
cat /sys/bus/w1/devices/28-00000465f413/w1_slave | tr "t=" "\n"
...获得该值但我无法将其变为单独的变量...
T1FILE=$(cat /sys/bus/w1/devices/28-00000465f413/w1_slave | tr "t=" "\n")
T2FILE=$(cat /sys/bus/w1/devices/28-0000046612e5/w1_slave | tr "t=" "\n")
我该怎么做?
感谢您的帮助!我正在使用awk变体!
T1=$(awk -F'=' '/ t=/ {print $NF }' /sys/bus/w1/devices/28-00000465f413/w1_slave)
T2=$(awk -F'=' '/ t=/ {print $NF }' /sys/bus/w1/devices/28-0000046612e5/w1_slave)
答案 0 :(得分:1)
使用awk,将=
指定为字段分隔符(-F
),对于包含字符串“t=
”,print
的每一行,最后一个字段($NF
)在该行上,使用/sys/bus/w1/devices/28-00000465f413/w1_slave
作为输入:
awk -F'=' '/ t=/ { print $NF }' /sys/bus/w1/devices/28-00000465f413/w1_slave
全部放在一起:
T1FILE=$(awk -F'=' '/ t=/ { print $NF }' /sys/bus/w1/devices/28-00000465f413/w1_slave)
答案 1 :(得分:1)
尝试grep:
grep -Po "(?<=t=)\d+" file
试验:
kent$ echo "46 01 4b 46 7f ff 0a 10 85 : crc=85 YES
46 01 4b 46 7f ff 0a 10 85 t=20375"|grep -Po "(?<=t=)\d+"
20375
答案 2 :(得分:1)
使用awk,在行尾不需要t=
。
awk '{FS="t="} /t=/ { split($2, t," "); print t[1] }' /sys/bus/w1/devices/28-00000465f413/w1_slave