我很好奇如果有一種簡單的方法將bash命令轉換爲ruby腳本。Bash to Ruby - 通過whois和grep命令獲取列表
如果你在你的命令行輸入這個,你會得到一個ip網絡列表。
whois -h whois.radb.net -- '-i origin AS35995' | grep -Eo "([0-9.]+){4}/[0-9]+"
有沒有一種簡單的方法在Ruby中做類似的事情,還是我必須手動編碼?
對不起noob問題,並提前感謝任何幫助!
我很好奇如果有一種簡單的方法將bash命令轉換爲ruby腳本。Bash to Ruby - 通過whois和grep命令獲取列表
如果你在你的命令行輸入這個,你會得到一個ip網絡列表。
whois -h whois.radb.net -- '-i origin AS35995' | grep -Eo "([0-9.]+){4}/[0-9]+"
有沒有一種簡單的方法在Ruby中做類似的事情,還是我必須手動編碼?
對不起noob問題,並提前感謝任何幫助!
的是你可以離開的命令,並使用@ AndreyDeineko的有效的解決方案。
您可以用String#scan
執行中的Ruby grep命令:
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/
路線是一個字符串數組,從whois
含有route
值。
最後,看來你也可以用gem執行whois
。
那麼,you have quite a few options。
這裏是一個反勾選項(symply包圍與反引號任何bash命令):
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
所以這意味着我不能遍歷它們,對吧? – CottonEyeJoe
@Harakiri:如果你在命令返回的字符串上使用'.split',你可以。 –
嘿安德雷讚賞你!我已經拿到了埃裏克的回答。 – CottonEyeJoe
不錯!謝謝!這正是我一直在尋找的! – CottonEyeJoe
作爲通常完美的,涉及的答案。 +1金幣) –
@AndreyDeineko:謝謝!這是一個美好的月份。我的下一個目標是在[1月](http://stackexchange.com/leagues/1/month/stackoverflow/2017-01-01/6419007#6419007)中領先於JonSkeet。 :) –