要重新格式化的Ruby gsub数组元素

要重新格式化的Ruby gsub数组元素,ruby,arrays,regex,gsub,Ruby,Arrays,Regex,Gsub,我想看看我是否可以得到一些帮助,重新格式化数组中的一些元素,使它们以某种方式输出。以下是我目前掌握的情况: node = gets.chomp nodelist = `knife node list` if nodelist.include?(node) cookbook_versions = `knife solve -n #{node}`.split(/\n/).drop(1) cookbook_versions.collect!{|element| element.gsub!(#

我想看看我是否可以得到一些帮助,重新格式化数组中的一些元素,使它们以某种方式输出。以下是我目前掌握的情况:

node = gets.chomp
nodelist = `knife node list`

if nodelist.include?(node)
  cookbook_versions = `knife solve -n #{node}`.split(/\n/).drop(1)
  cookbook_versions.collect!{|element| element.gsub!(#regexhere)}
  puts cookbook_versions
else
  puts "not found"
end
目前的产出:

7-zip 1.0.2
apache2 2.0.0
apt 2.6.0
ark 0.9.0
我希望它看起来像这样:

"7-zip": "1.0.2",
"apache2": "2.0.0",
"apt": "2.6.0",
"ark": "0.9.0"

有谁知道能帮我做这件事的正则表达式吗?还是其他方式?我把regexhere放在上面的代码中,因为我今天的尝试还没有成功

["7-zip 1.0.2", "apache2 2.0.0"]
我想把它们转换成一个键值列表,尽管我怀疑你真的想要json

node = gets.chomp
nodelist = `knife node list`

if nodelist.include?(node)
  cookbook_versions = `knife solve -n #{node}`.split(/\n/).drop(1).map {|line| line.split(" ", 2) }
  puts JSON.pretty_generate Hash[*cookbook_versions.flatten]
else
  puts "not found"
end
通过演示:

# Given:
x = ["apache2 1.9.6", "iptables 0.12.0", "logrotate 1.5.0", "pacman 1.1.1"]

> puts JSON.pretty_generate Hash[*x.flat_map {|line| line.split(" ", 2) }]
{
  "apache2": "1.9.6",
  "iptables": "0.12.0",
  "logrotate": "1.5.0",
  "pacman": "1.1.1"
}
如果希望不使用大括号,您可能只需要迭代并手动显示列表:

if nodelist.include?(node)
  cookbook_versions = `knife solve -n #{node}`.split(/\n/).drop(1).map {|line| line.split(" ", 2) 
  puts cookbook_versions.map {|line| format('"%s": "%s"', *line) }.join(",\n")
else
  puts "not found"
end
输出:

"apache2": "1.9.6",
"iptables": "0.12.0",
"logrotate": "1.5.0",
"pacman": "1.1.1"

您当前输出的节点是什么?您需要什么?当您询问有关格式化数据的问题时,请提供输入数据的示例,而不是让我们发明它。您的第二个块正是我要找的。谢谢!是的,你的猜测是正确的……我正在寻找json格式输出。