Bash to Ruby - 使用whois和grep命令获取列表

Cot*_*Joe 1 ruby ruby-on-rails

我很好奇是否有一种将bash命令转换为ruby脚本的简单方法.

如果在命令行中键入此内容,则会获得ip网络列表.

whois -h whois.radb.net -- '-i origin AS35995' | grep -Eo "([0-9.]+){4}/[0-9]+"
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以在Ruby中执行类似的操作,或者我是否必须手动编写代码?

对不起noob问题,并提前感谢您的帮助!

Eri*_*nil 5

您可以按原样保留命令并使用@ AndreyDeineko的有效解决方案.

您可以在Ruby中执行grep命令String#scan:

abc   = 'AS35995'
whois = `whois -h whois.radb.net -- '-i origin #{abc}'`
# route:      8.25.194.0/23
# descr:      Twitter
# origin:     AS35995
# admin-c:    NETWO3685-ARIN
# tech-c:     NETWO3685-ARIN
# notify:     noc@twitter.com
# mnt-by:     MAINT-AS13414
# changed:    ck@twitter.com 20121028  #17:03:09Z
# source:     RADB

# route:      8.25.196.0/23
# descr:      Twitter
# origin:     AS35995
# ....

p routes = whois.scan(/[\d\.]{7,}\/\d+/)
#=> ["8.25.194.0/23", "8.25.196.0/23", "192.133.78.0/23", "8.25.194.0/24", "8.25.195.0/24", "8.25.196.0/24", "8.25.197.0/24", "185.45.4.0/24", "103.252.112.0/23", "185.45.4.0/23"]
Run Code Online (Sandbox Code Playgroud)

这个正则表达式很简单,但可能太匹配了.从这个链接看,它看起来像一个更准确的正则表达式:

/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/\d+\b/
Run Code Online (Sandbox Code Playgroud)

Route现在是一个字符串数组,包含route来自的值whois.

最后,似乎你也可以whois用这个gem执行.