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

发布于 2024-12-01 04:29:47 字数 413 浏览 1 评论 0原文

假设我有一些以逗号分隔的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ま柒月 2024-12-08 04:29:47

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

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

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).

line.scan(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/) do |ip|
  hostNamesHash[ip] = `dig -x #{ip} +short`
end

or

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文