2016-04-07 102 views
0

我在寫一個使用跟蹤路由的腳本。我遍歷跟蹤路由的每一行,然後遍歷每個單詞(用空格分隔)。但是,有時跟蹤路由會返回*字符,這會在回顯(輸出文件名)時導致問題。Bash正則表達式來檢查字符串的第一個字符是否是一個數字

我一直在擺弄用正則表達式,到目前爲止我已經想出了這一點:

if [[ $item =~ ^\d ]]; 

項目是跟蹤路由的一部分。

對於跟蹤路由行中的每個項目,我只想檢查第一個字符是否等於數字,然後相應地繼續。

+0

您需要使用if [[$ item =〜^ [0-9]]];不支持','\ d'。 –

+1

'^ [[:digit:]]'也可以工作 – rock321987

+0

http://stackoverflow.com/questions/35894043/how-do-i-validate-that-a-version-number-is-valid-using-a -regexp-in-bash/35894180#35894180 –

回答

3

\d不支持POSIX Regular Expressions(由Bash使用)。您需要[0-9]來取代它,像這樣:

if [[ $item =~ ^[0-9] ]]; 

退房this StackOverflow answer

也使用[:digit:],使其更易於閱讀:

if [[ $item =~ ^[[:digit:]] ]]; 
+0

應該是'^ [[:digit:]]' - '[:digit:]'是一個需要進入括號表達式的字符類。 –

+0

@TomFenech對不起,這是我快速打字!更正了,謝謝! – Druzion

1

沒有必要使用正則表達式只是glob的是足夠:

[[ $item == [0-9]* ]] && echo "it starts with a digit" 

您也可以使用:

[[ $item == [[:digit:]]* ]] 
+0

順便說一句,你知道什麼是更有效的Bash:球或正則表達式? –

+0

一般來說,正則表達式被認爲比glob模式慢,但我自己並沒有做過任何嚴肅的基準測試。 – anubhava

相關問題