我想把150.8
这根绳子剪掉temp1: +150.8°F (crit = +197.6°F)
。这是我使用命令记录温度的脚本sensors
:
#!/bin/bash
now=$(date +"%m_%d_%Y") # get current date
now_excel=$(date +"%D %H:%M") # get current date & time in excel format
file_dir="/var/www/html/logs"
file="$file_dir/logging_$now.csv" # backup name and directory
temp=$(sensors -Af | sed -n '2{p;q}') # temp1: +150.8°F (crit = +197.6°F)
#temp_num="$temp" | sed 's/+\(.*\)°/\1/g'
# add line to csv
printf "$now_excel" >> "$file"
printf ", " >> "$file"
printf "$temp" >> "$file"
printf "\n" >> "$file"
find "$file_dir"/* -mtime +3 -exec rm {} \; # remove any backup files older than 3 days
exit 0
答案1
使用 sed
这是一种方法:
$ sensors -Af | sed -n '2{s/°.*//; s/[^+-]*//; p; q}'
+105.8
或者,在里面使用相同的命令命令替换将其输出捕获到变量中:
temp=$(sensors -Af | sed -n '2{s/°.*//; s/[^+-]*//; p; q}')
s/°.*//
删除第一次出现的度数符号°
及其后的所有内容。 s/[^+-]*//
删除直到但不包括第一个+
或 的所有内容-
。
使用 awk
$ sensors -Af | awk 'NR==2{print $3+0; exit;}'
105.8
我们想要的数字在第三个字段中。因为第三个字段包含字符,例如+105.8°F
,我们添加0
到它。这迫使 awk 将其转换为我们想要的:数字。