Запись результата регулярного выражения в новый файл
У меня есть список устройств:
- ИПК-bei640-р-уш-01
- ИПК-bei640-р-уш-02
- ИПК-bei640-р-уш-03
- ИПК-bei640-р-уш-04
- ИПК-bei640-р-уш-05
- ИПК-bem640-р-уш-01
- ИПК-bem640-р-уш-02
- ИПК-bem640-р-уш-03
- ИПК-crg660-р-уш-02
- ИПК-geb680-р-уш-04
- ИПК-lgv630-р-уш-01
Этот маленький маленький скрипт ruby подсчитывает строки файла braslist.txt, сканирует его с помощью регулярного выражения и записывает результаты в новый файл с именем "strippedfile.txt".
lines = IO.readlines("/usr/local/bin/braslist.txt")
# Linecount is forwarded to StdOut.
puts lines.length
str = File.read('braslist.txt')
file_name = ['strippedfile.txt']
file_name.each do |file_name|
text = File.read(file_name)
new_contents = str.scan(/^ipc-(?<bng>[a-z]{3}\d{3})-r-br(?<nr>-\d{2})$/)
# open and write to a file with ruby
open('strippedfile.txt', 'w') { |f|
f.print new_contents
}
end
Теперь то, что я не могу исправить, в новом файле "strippedfile" результаты всегда ["bei640", "-01"] ["bei640", "-02"] ["bei640", "-03"]
И я пытаюсь получить все результаты в этом формате:
- bei640-01
- bei640-02
- bei640-03
- bei640-04
2 ответа
Решение
scan
возвращает массив совпадений, вы, вероятно, хотите join
их:
- new_contents = str.scan(/^ipc-(?<bng>[a-z]{3}\d{3})-r-br(?<nr>-\d{2})$/)
+ new_contents = str.scan(/^ipc-(?<bng>[a-z]{3}\d{3})-r-br(?<nr>-\d{2})$/).map(&:join)
To print everything without quotes and brackets line by line:
- f.print new_contents
+ f.puts new_contents
Предполагая, что ваш результирующий массив
a = [["bei640", "-02"], ["bei640", "-03"]]
Ты можешь использовать join
чтобы получить желаемый результат
a.map{|i| i.join } #=> ["bei640-02", "bei640-03"]
или использовать ярлык как mudasobwa
ответил
a.map(&:join) #=> ["bei640-02", "bei640-03"]