在 Ruby 中,如何使用正则表达式匹配将字符串的文字值传递到命令行?
假设我有一些以逗号分隔的 IP 地址列表:
line = "10.5.23.21,12.23.123.4,5.23.4.234"
我想使用正则表达式和循环将匹配项传递到命令行并运行 dig 在这些 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 的字面值,而不是附加的 [""] ?
Let's say I have some comma separated list of IP address:
line = "10.5.23.21,12.23.123.4,5.23.4.234"
I'd like to do hostname lookups on these IPs using a RegEx and a loop that passes the matches to the command line and runs dig:
line.scan(/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/) do |ip|
hostNamesHash[ip] = `dig -x #{ip} +short`
end
The problem is that this is actual command that gets run:
`dig -x ["10.5.23.21"] +short`
How can I change my code to make sure that #{ip} just passes in the literal value of ip, not the extra [""] along with it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您的正则表达式包含组,则扫描会生成每个匹配的匹配组数组。
您可以删除括号(无论如何它们包括整个匹配项),或者展平整个扫描结果(每个匹配项只有一组)。
或者
If your regexp contains groups, the scan yields an arrays of match groups per match.
You either remove the parentheses (anyway they include the whole match), or you flatten the whole scan result (there is only one group per match).
or