如何在丢弃不需要的部分时获得价值?

时间:2013-03-18 11:18:17

标签: bash

我现在已经浏览和搜索了很长一段时间,我尝试了几种方法 但我似乎做错了什么。

我正在从/ 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)

3 个答案:

答案 0 :(得分:1)

使用,将=指定为字段分隔符(-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