我正在尝试运行shell脚本,而不是处理Ruby代码,以匹配git log --stat
命令结果中的一些正则表达式。我的外壳我可以运行以下程序:
$ if [[ ' 1 file changed, 2 insertions(+), 3 deletions(-)' =~ ([0-9]*).insertion ]]; then echo ${BASH_REMATCH[1]}; fi
2
但是,当我在Ruby(irb)中使用backticks:时
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
=> ""
如何处理(
和[
等特定字符?
可能值得一看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