2016-01-10 3 views
-3

Я хотел бы проанализировать файл /etc/resolv.conf и получить вывод ip-адреса. Мой файл:Проанализируйте файл и получите результат

cat /etc/resolv.conf 
    # puppet managed 
    search eb.com eb.io.com 
    nameserver 10.1.21.1 
    nameserver 10.1.9.5 
    nameserver 10.1.2.29 
    nameserver 10.1.5.28 

Это дает выход как:

nameserver 10.1.21.1 
nameserver 10.1.9.5 
nameserver 10.1.2.29 
nameserver 10.1.5.28 

, но мне нужно только адрес IP-в одной строке.

10.1.21.1 10.1.9.5 10.1.2.29 10.1.5.28 

Могу ли я помочь кому-нибудь?

+0

IO.readlines.each {| x | # match regex и помещать куда-нибудь} –

+0

Спасибо за комментарий. Но я получил выход из всего материала от resolv.conf «марионетка управлялась eb.com eb.io.com 10.1.21.1 10.1.9.5 10.1.2.29 10.1.5.28». Но мне нужен только IP-адрес, можно ли отключить все другая строка в выходе? – karthik

+0

Вот что я сказал: используйте регулярное выражение, вот для чего они предназначены. –

ответ

0

Этот простой фрагмент кода должен работать на вас.

Для каждой строки в файле мы проверяем, существует ли слово «сервер имен», за которым следует IP-адрес.

Если это правда, мы храним этот IP-адрес в массиве, в конце мы печатаем все адреса, соединенные пробелом.

ip_addresses = [] 
File.readlines('/etc/resolv.conf').each do |line| 
    match = line.match(/nameserver\W+(\d+\.\d+\.\d+\.\d+)/) 
    next unless match 
    ip_addresses << match[1] 
end 

puts ip_addresses.join ' '