在Ruby中,如何使用正则表达式匹配将字符串的文本值传递给命令行?

在Ruby中,如何使用正则表达式匹配将字符串的文本值传递给命令行?,ruby,regex,command-line,Ruby,Regex,Command Line,假设我有一些以逗号分隔的IP地址列表: line = "10.5.23.21,12.23.123.4,5.23.4.234" 我想使用正则表达式和循环在这些IP上查找主机名,该循环将匹配项传递到命令行并运行: line.scan(/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/) do |ip| hostNamesHash[ip] = `dig -x #{ip} +short` end 问题是这是实际运行的命令: `dig -x ["10.5.23.21"]

假设我有一些以逗号分隔的IP地址列表:

line = "10.5.23.21,12.23.123.4,5.23.4.234"
我想使用正则表达式和循环在这些IP上查找主机名,该循环将匹配项传递到命令行并运行:

line.scan(/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/) do |ip|
  hostNamesHash[ip] = `dig -x #{ip} +short`
end
问题是这是实际运行的命令:

`dig -x ["10.5.23.21"] +short`

如何更改代码以确保#{ip}只传入ip的文字值,而不是额外的[“”]值?

如果regexp包含组,则扫描会生成每个匹配的匹配组数组。 您可以删除括号(无论如何,它们都包括整个匹配),也可以展平整个扫描结果(每个匹配只有一组)


谢谢我没有意识到我的RegExp返回的是一个由1个元素组成的数组。
line.scan(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/) do |ip|
  hostNamesHash[ip] = `dig -x #{ip} +short`
end
line.scan(/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/).flatten.each do |ip|
  hostNamesHash[ip] = `dig -x #{ip} +short`
end