在Ruby中脱颖而出

时间:2015-02-14 01:46:29

标签: ruby bash

我正在尝试运行shell脚本而不是处理Ruby代码以匹配git log --stat命令的结果中的一些正则表达式。我的shell我可以运行以下内容:

$ if [[ ' 1 file changed, 2 insertions(+), 3 deletions(-)' =~ ([0-9]*).insertion ]]; then echo ${BASH_REMATCH[1]}; fi
2

但是,当我在Ruby(irb)中使用反引号尝试它时:

2.2.0 :001 > `if [[ ' 1 file changed, 2 insertions(+), 3 deletions(-)' =~ ([0-9]*).insertion ]]; then echo ${BASH_REMATCH[1]}; fi`
sh: 1: Syntax error: "(" unexpected (expecting "then")
 => ""

为了简化我在shell中尝试过的以下问题:

$ if [[ 'example' =~ am ]]; then echo 'match'; fi;
match

但是再一次,在Ruby中尝试它时:

2.2.0 :001 > `if [[ 'example' =~ am ]]; then echo 'match'; fi;`
sh: 1: [[: not found
 => ""

如何处理([等特定字符?

1 个答案:

答案 0 :(得分:0)

可能值得看看ruby git gem可以做什么,但这里有一个ruby解决方案来读取输出而不必处理shell regexp。

IO.popen('git log --stat') do |io|
  while line = io.gets
    if line =~ /(\d+) files changed, (\d+) insertions..., (\d+) deletions/
      files_changed = $1.to_i
      insertions = $2.to_i
      deletions = $3.to_i

      # Do something real here
    end
  end
end