簡體   English   中英

如何在bash shell腳本中僅過濾字符串中的數字?

[英]How to filter only digits from a string in bash shell scripting?

我想測量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

在此處輸入圖片說明

刪除文本中不想要的字符的典型工具是trsed (以及使用${var##text}類的結構直接在shell中操作變量,但除非您想使用shell專有的擴展功能,否則這些功能將提供有限的功能)。 對於您的用例,似乎最容易做到:

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

這只是刪除( -d )不是( -c )字符類digit成員的所有字符。

您可以使用內置的字符串操作僅在變量中打印數字和句點。 以下是用空字符串替換不是數字或句點的任何字符的全局子字符串:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM