我在寫一個使用跟蹤路由的腳本。我遍歷跟蹤路由的每一行,然後遍歷每個單詞(用空格分隔)。但是,有時跟蹤路由會返回*
字符,這會在回顯(輸出文件名)時導致問題。Bash正則表達式來檢查字符串的第一個字符是否是一個數字
我一直在擺弄用正則表達式,到目前爲止我已經想出了這一點:
if [[ $item =~ ^\d ]];
項目是跟蹤路由的一部分。
對於跟蹤路由行中的每個項目,我只想檢查第一個字符是否等於數字,然後相應地繼續。
我在寫一個使用跟蹤路由的腳本。我遍歷跟蹤路由的每一行,然後遍歷每個單詞(用空格分隔)。但是,有時跟蹤路由會返回*
字符,這會在回顯(輸出文件名)時導致問題。Bash正則表達式來檢查字符串的第一個字符是否是一個數字
我一直在擺弄用正則表達式,到目前爲止我已經想出了這一點:
if [[ $item =~ ^\d ]];
項目是跟蹤路由的一部分。
對於跟蹤路由行中的每個項目,我只想檢查第一個字符是否等於數字,然後相應地繼續。
\d
不支持POSIX Regular Expressions(由Bash使用)。您需要[0-9]
來取代它,像這樣:
if [[ $item =~ ^[0-9] ]];
也使用[:digit:]
,使其更易於閱讀:
if [[ $item =~ ^[[:digit:]] ]];
應該是'^ [[:digit:]]' - '[:digit:]'是一個需要進入括號表達式的字符類。 –
@TomFenech對不起,這是我快速打字!更正了,謝謝! – Druzion
沒有必要使用正則表達式只是glob的是足夠:
[[ $item == [0-9]* ]] && echo "it starts with a digit"
您也可以使用:
[[ $item == [[:digit:]]* ]]
順便說一句,你知道什麼是更有效的Bash:球或正則表達式? –
一般來說,正則表達式被認爲比glob模式慢,但我自己並沒有做過任何嚴肅的基準測試。 – anubhava
您需要使用if [[$ item =〜^ [0-9]]];不支持','\ d'。 –
'^ [[:digit:]]'也可以工作 – rock321987
http://stackoverflow.com/questions/35894043/how-do-i-validate-that-a-version-number-is-valid-using-a -regexp-in-bash/35894180#35894180 –