作者 主題: regular expression 問題  (閱讀 3520 次)

0 會員 與 1 訪客 正在閱讀本文。

paulso

  • 俺是博士!
  • *****
  • 文章數: 1966
    • 檢視個人資料
regular expression 問題
« 於: 2008-02-02 11:13 »
我想做到的效果是, 檢查 user 輸入的速度是正確的
例如想限制格式是 150k, 數字開頭, k 字結束
但不懂為下以下的的結果會這樣...

echo '150k' | egrep '\d*k$'
可以, 不過若果是 k150k 也會有結果...

echo '150k' |grep -E '\d+k$'
1 個或以上的數字, 但不知道為何沒有結果...

echo '150k' | egrep '^\d*k$'
以數字開頭, 但不知為何不是想像中的結果...



我寫的 script 是這樣的

代碼: [選擇]
maxSpeed=""
while [ "`echo $maxSpeed| egrep "^\d+k$"`" == "" ]
do
        echo "Please limit max download speed (eg: 100k): "
        read maxSpeed
done

為何以上結果會那麼出人意外呢  :o
又或者有沒有更好的寫法呢

謝謝~

paulso

  • 俺是博士!
  • *****
  • 文章數: 1966
    • 檢視個人資料
回覆: regular expression 問題
« 回覆 #1 於: 2008-02-14 10:10 »
不好意思推一推, 因為想知道答案
有沒有師兄能幫一幫呢?謝謝

anderson1127

  • 訪客
回覆: regular expression 問題
« 回覆 #2 於: 2008-02-14 12:19 »
說實話,我不會shell script , 我只會Perl/PHP 的Regular Expression ...
可不可以改成Perl or PHP ??

PS: 就是因為不大會shell script , 所以我幾乎都是用Perl or PHP寫shell script ...  :P

gwstudy

  • 活潑的大學生
  • ***
  • 文章數: 205
    • 檢視個人資料
回覆: regular expression 問題
« 回覆 #3 於: 2008-02-14 12:24 »
不好意思推一推, 因為想知道答案
有沒有師兄能幫一幫呢?謝謝
測試碼如下
echo " 123k   " |sed 's/^ *\(.*\) *$/\1/' |grep -q '^[[:digit:]]\+k' ; echo $?

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
回覆: regular expression 問題
« 回覆 #4 於: 2008-02-14 15:17 »
代碼: [選擇]
echo "$speed" | grep "^[0-9]*k$" 1>/dev/null 2>/dev/null
if [ $? -ne 0 ]; then
  echo "wrong speed"
  read speed
fi

paulso

  • 俺是博士!
  • *****
  • 文章數: 1966
    • 檢視個人資料
回覆: regular expression 問題
« 回覆 #5 於: 2008-02-14 16:09 »
感謝回應, 試過所建議的指令, 再加上我再測試之後
發覺問題在 \d, \d 不是 [0-9] 所以不成功 (但是我是看 notes 看到才用 \d)
謝謝