如何在bash shell脚本中仅过滤字符串中的数字?

时间:2018-01-13 13:48:30

标签: bash shell

我想测量Raspberry pi 3的温度,并相应地更改文本的背景颜色。随着代码的进行,我们可以在显示屏上打印温度。现在,我想只从文本中过滤数字。并在if条件下使用它。源代码如下:

#!/bin/bash

measurement()
{
    i=1
    echo "Reading Temperature"
    echo "Updating time is set to $1"
    while [ $i -eq 1 ]; do
        temp="$(vcgencmd measure_temp | cut -d= -f 2 | cut -d\' -f 1)"
            tput setaf 7

        if [[ $temp -ge 70 ]]; then
                    tput setab 1
                    echo -ne "Temperature = $temp\r"
        elif [[ $temp -ge 65 && $temp -le 69 ]]; then
                    put setab 3
                    echo -ne "Temperature = $temp\r"
        elif [[ $temp -ge 60  && $temp -le 64 ]]; then
                    tput setab 2
                    echo -ne "Temperature = $temp\r"
        elif [[ $temp -ge 55 && $temp -le 59 ]]; then
                        tput setab 6
                        echo -ne "Temperature = $temp\r"
        else
            tput setab 4
            echo -ne "Temperature = $temp\r"
        fi
        sleep $1
        done
}

if [ -n "$1" ]; then
        sleep_time=$1
        measurement $sleep_time
else
        read -p "Enter the Update Time: " sleep_time
        measurement  $sleep_time
fi

enter image description here

2 个答案:

答案 0 :(得分:3)

从文本中删除不需要的字符的典型工具是trsed(并直接在shell中操作变量,使用${var##text}等结构,但除非您想使用特定于shell的那些提供有限能力的扩展)。对于您的用例,似乎最容易做到:

temp="$(vcgencmd measure_temp | tr -cd '[[:digit:]]')"

这只删除(-d)所有不是(-c)字符类digit成员的字符。

答案 1 :(得分:2)

您可以使用内置字符串操作仅打印变量中的数字和句点。以下是任何字符的全局子字符串替换,该字符不是带有空字符串的数字或句点:

echo "${temp//[^0-9.]/}"