unix:如何判断字符串是否与正则表达式匹配

时间:2013-05-19 04:34:43

标签: regex linux unix pattern-matching fish

尝试fish shell,所以我正在翻译我的bash函数。问题是,在一种情况下,我正在使用bash正则表达式来检查字符串是否与正则表达式匹配。我无法弄清楚如何把它翻译成鱼。

Here是我的榜样。

if [[ "$arg" =~ ^[0-9]+$ ]]
...
  • 我查看了 sed ,但根据正则表达式是否匹配,我没有办法让它设置退出状态。
  • 我考虑委派给 Ruby ,但是再一次,根据匹配设置退出状态需要让它变得非常丑陋(见下文)。
  • 我考虑回到 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

3 个答案:

答案 0 :(得分:9)

标准方法是使用grep

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

答案 1 :(得分:1)

我建议使用内置的string match子命令

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

答案 2 :(得分:0)

从版本3.2开始,Bash本身支持正则表达式,请参阅http://www.tldp.org/LDP/abs/html/bashver3.html#REGEXMATCHREF