在Ruby中,如何使用正则表达式匹配将字符串的文本值传递给命令行?
假设我有一些以逗号分隔的IP地址列表:在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"]
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