-1

I would like to be able to do

irb(main):054:0> ip = "192.168.1.255"
=> "192.168.1.255"
irb(main):055:0> ip.sub(/\d+$/, '*')
=> "192.168.1.*"

for the last n quartets. e.g. "192.168.1.255" => "192.168.*.*" etc.

gr8scott06
  • 903
  • 1
  • 11
  • 20

2 Answers2

1
def wildcard ip, blocks=1
  ip.split(".")[0..3-blocks].join(".") + ".*" * blocks
end

now tested

[46] pry(main)> wildcard a
=> "192.168.0.*"
[47] pry(main)> wildcard a, 2
=> "192.168.*.*"
[48] pry(main)> wildcard a, 3
=> "192.*.*.*"

or go OOP

class String
  def wildcard blocks=1
    self.split(".")[0..3-blocks].join(".") + ".*" * blocks
  end
end
# "192.168.0.1".wildcard => 192.168.0.*
# "192.168.0.1".wildcard(2) => 192.168.*.*
# "192.168.0.1".wildcard(3) => 192.*.*.*
Tim Kretschmer
  • 2,272
  • 1
  • 22
  • 35
1

You can split the ip on "." and get an array of quartets.

def wildcard_ip(ip, n)
  len = ip.split('.').size
  ip.split('.').each_with_index.map{|q,i| i < len-n ? q : '*'}.join('.')
end    
Mark Swardstrom
  • 17,217
  • 6
  • 62
  • 70