ruby如何匹配子字符串
我有一个这样的文本文件ruby如何匹配子字符串,ruby,regex,Ruby,Regex,我有一个这样的文本文件 ....(omission) ec2-123.compute-1.amazonaws.com : ok=333 .... PLAY RECAP ********************************************************************* ec2-123.compute-1.amazonaws.com : ok=16 changed=2 unreachable=0 failed=0 ec2-456.
....(omission)
ec2-123.compute-1.amazonaws.com : ok=333
....
PLAY RECAP *********************************************************************
ec2-123.compute-1.amazonaws.com : ok=16 changed=2 unreachable=0 failed=0
ec2-456.compute-1.amazonaws.com : ok=11 changed=0 unreachable=0 failed=0
ec2-766.compute-1.amazonaws.com : ok=40 changed=15 unreachable=0 failed=0
localhost : ok=0 changed=0 unreachable=0 failed=0
...(omission)
ec2-123.compute-1.amazonaws.com : ok=1231
..
如何在PLAY RECAP和localhost之间获取内容
并根据主机名的follow值ok=,对主机名进行排序,如ec2-123.compute-1.amazonaws.com
像这样的散列输出
{"ec2-123.compute-1.amazonaws.com" => 16,"ec2-456.compute-1.amazonaws.com" => 11,"ec2-766.compute-1.amazonaws.com" => 40,}
要从整个文件中获取输入,请执行以下操作:
▶ input = input[/PLAY RECAP.*?^(.+?)^localhost/m, 1]
要对结果进行哈希化,请执行以下操作:
▶ input.scan(/(\S+) : ok=(\w+)/).to_h
#⇒ {
# "ec2-123.compute-1.amazonaws.com" => "16",
# "ec2-456.compute-1.amazonaws.com" => "11",
# "ec2-766.compute-1.amazonaws.com" => "40"
# }
按主机名排序(thx Wiktor Stribiżew用于提醒。)
您尝试过什么吗?可能是。看,按照主机名的follow值对主机名进行排序,如ec2-123.compute-1.amazonaws.com ok=-您的解决方案没有考虑到这一点。@WiktorStribiżew确实如此。现在可以了。对不起,我的错误,省略的单词可能包含
ec2-123.compute-1.amazonaws.com:ok=333
像这样的字符串请查看更新。
input.scan(/(\S+) : ok=(\w+)/)
.to_h
.sort_by { |k, _| k[/(?<=ec2-)\d+/].to_i }
input.scan(/(\S+) : ok=(\w+)/)
.to_h
.sort_by { |_, ok| ok.to_i }