2013-05-19 90 views
9

嘗試fish shell,所以我正在翻譯我的bash函數。問題是,在一種情況下,我使用bash正則表達式來檢查字符串是否與正則表達式匹配。我無法弄清楚如何將它翻譯成魚。unix:如何判斷一個字符串是否與正則表達式匹配

Here是我的例子。

if [[ "$arg" =~ ^[0-9]+$ ]] 
... 
  • 我看着sed的,但我不明白的方式得到它的基礎上是否正則表達式匹配設置它的退出狀態。
  • 我看着代理到紅寶石,但再次,獲取基於匹配的退出狀態設置需要使這真的很醜(見下文)。
  • 我看着回到bash,但儘管嘗試了三四種方法,但從來沒有達到過。

那麼,有沒有在* nix中的方式來檢查,如果字符串匹配的正則表達式,所以我可以將其放到一個條件?


這裏是我目前的工作,但我不滿意:

# kill jobs by job number, or range of job numbers 
# example: k 1 2 5 
# example: k 1..5 
# example: k 1..5 7 10..15 
# example: k 1-5 7 10-15 
function k 
    for arg in $argv 
    if ruby -e "exit ('$arg' =~ /^[0-9]+\$/ ? 0 : 1)" 
     kill -9 %$arg 
    else 
     set _start (echo "$arg" | sed 's/[^0-9].*$//') 
     set _end (echo "$arg" | sed 's/^[0-9]*[^0-9]*//') 

     for n in (seq $_start $_end) 
     kill -9 %"$n" 
     end 
    end 
    end 
end 

回答

9

的標準方法是使用grep

if echo "$arg" | grep -q -E '^[0-9]+$' 
    kill -9 %$arg 
+0

謝謝!我甚至沒有意識到有-E標誌(總是使用awk),'-q'標誌,或者它會根據它是否匹配來設置其退出狀態。 –

+0

在OS X上安裝GNU grep以使用-P(Perl正則表達式語法)。 – xixixao

1

我會建議使用內置的string match子命令

if string match -r -q '^[0-9]+$' $arg 
    echo "number!" 
else 
    echo "not a number" 
end 
相關問題