我正在尝试运行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
=> ""
如何处理(
和[
等特定字符?
答案 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