2015-05-21 2 views
0

Имейте список меньших сетевых элементов, которые я пытаюсь перечислить в stdout. Мой маленький маленький скрипт работает до регулярного выражения, после того как я получил запрос о том, что я хочу найти, он перечисляет всю строку.Комбинировать Grep и Regex?

Пример:

Пожалуйста, введите область

Входной: Bei

Выход:

ИПК-bei640-р-уш-01

ipc- bei640-r-br-02

ИПК-bei640-р-уш-03

Вместо:

bei640-01

bei640-02

bei640-03

Кроме того, если я просто нажать " Enter "на входе перечислены все устройства.

lines = IO.readlines("/usr/local/bin/braslist.txt") 

devices = [] 
str = File.read('braslist.txt') 

while true 
print "Please enter a region. If you want to exit enter exit " 
input = gets.chomp 
exit if input == 'exit' 

#Opens file and greps for input 
File.open("braslist.txt", "r+") do |f| 
    f.each do |line| 
    devices += line.split(" ").grep(/#{input}/i) 
    input.scan(/^ipc-(?<bng>[a-z]{3}\d{3})-r-br(?<nr>-\d{2})$/).map(&:join) 
     end 
end 


puts devices 
puts "#{devices.length} network elements found" 
end 

ответ

0

Вы можете попробовать цикла по результату Grep следующим образом:

File.open("braslist.txt", "r+") do |f| 
    f.each do |line| 
    line.split(" ").grep(/#{input}/i).each do |string| 
     match = string.match(/^ipc-(?<bng>[a-z]{3}\d{3})-r-br(?<nr>-\d{2})$/) 
     devices << match[:bng] + match[:nr] 
    end 
    end 
end 

(я также думаю, используя спичку вместо сканирования делает вещи немного яснее)

+0

Работает как шарм, просто то, что я искал. – user3820869