2013-05-19 63 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 
相关问题