如何檢查是否字符串包含版本數字小/十進制格式的shell腳本我們如何檢查是否字符串是一個版本號或不
的如我們有1.2.3.5或2.3.5
如果我們對這裏的字符數量沒有限制,該怎麼辦?它也可以是x.x.x.x或x.x。
如何檢查是否字符串包含版本數字小/十進制格式的shell腳本我們如何檢查是否字符串是一個版本號或不
的如我們有1.2.3.5或2.3.5
如果我們對這裏的字符數量沒有限制,該怎麼辦?它也可以是x.x.x.x或x.x。
echo -n "Test: "
read i
if [[ $i =~ ^[0-9]+(\.[0-9]+){2,3}$ ]];
then
echo Yes
fi
此接受digits.digits.digits
或digits.digits.digits.digits
變化{2,3}
縮小或放大的.digits
可接受號碼(或{2,}
爲 「至少2」)
^
表示字符串開頭[0-9]+
指至少一個數字\.
是點(...){2,3}
接受2或內部的()
$
什麼3表示字符串的結束您可以使用'{2,}'去除上限:1.2.3.4.5.6.7.8 –
@glennjackman謝謝。回答這個問題,它似乎是3或4個數字,但的確,這可能是*至少2 *(+1,第一個) –
謝謝,上限是個好主意 –
如果您使用bash
,您可以使用正則表達式=~
比賽二元運算,例如:
pax> if [[ 1.x20.3 =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] ; then echo yes ; fi
pax> if [[ 1.20.3 =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] ; then echo yes ; fi
yes
爲特定的測試數據,下面的正則表達式會做的伎倆:
^[0-9]+(\.[0-9]+)*$
(後跟任意數量的.<number>
擴展的數字),但是,如果要處理邊緣情況(如1.2-rc7
或4.5-special
),則需要更復雜一些。
翻轉的邏輯:檢查它是否包含一個「無效」字符:
$ str=1.2.3.4.5; [[ $str == *[^0-9.]* ]] && echo nope || echo yup
yup
$ str=123x4.5; [[ $str == *[^0-9.]* ]] && echo nope || echo yup
nope
本答覆的下限WER:
$ str=123....; [[ $str == *[^0-9.]* ]] && echo nope || echo yup
yup
如果你真的僅限於Bourne shell中,然後用EXPR:
if expr 1.2.3.4.5 : '^[0-9][.0-9]*[0-9]$' > /dev/null; then
echo "yep, it's a version number"
fi
我敢肯定有涉及AWK或sed的解決方案,但這個會做。
實際上,這會接受「1 ..2「,這可能不被你接受。 –
正則表達式? –
你關心-alpha版本,RC版本,-stable版本等嗎? –
希望您的腳本不包含IP地址。 – devnull