2017-01-30 2 views
1

Мне любопытно, есть ли простой способ конвертировать команду bash в ruby-скрипт.Bash to Ruby - получить список с командой whois и grep

Если вы наберете это в командной строке, вы получите список ip-сетей.

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

Есть ли простой способ сделать что-то подобное в Ruby, или мне нужно его вручную закодировать?

Извините за вопрос о нобе и заблаговременно за любую помощь!

ответ

5

Вы можете оставить команду как и использовать @ действительное решение AndreyDeineko в.

Можно выполнить команду 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:  [email protected] 
# mnt-by:  MAINT-AS13414 
# changed: [email protected] 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"] 

Это регулярное выражение просто, но может соответствовать слишком много. Из этого link, он выглядит более точное регулярное выражение будет:

/\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/ 

Маршрут теперь массив строк, содержащий route значения из whois.

Наконец, кажется, вы также можете выполнить whois с этим gem.

+0

приятно! благодаря! Это именно то, что я искал! – CottonEyeJoe

+1

как обычно - идеальный, включая ответ. +1 к золоту;) –

+0

@ AndreyDeineko: Спасибо! Это был хороший месяц. Моя следующая цель - опередить JonSkeet в январе [http://stackexchange.com/leagues/1/month/stackoverflow/2017-01-01/6419007#6419007) 1 день! :) –

2

Ну, you have quite a few options.

Вот вариант обратных кавычек (symply окружают любую команда оргии с обратными кавычками):

puts `whois -h whois.radb.net -- '-i origin AS35995' | grep -Eo "([0-9.]+){4}/[0-9]+"` 
# 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 

system вариант:

system("whois -h whois.radb.net -- '-i origin AS35995' | grep -Eo '([0-9.]+){4}/[0-9]+'") 
# 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 
+0

Значит, это означает, что я не могу проходить через них, верно? – CottonEyeJoe

+0

@Harakiri: Вы можете использовать '.split' в строке, возвращаемой командой. –

+0

эй, Андрей, это тебе! Я пошел с ответом Эрика. – CottonEyeJoe

Смежные вопросы