Запись результата регулярного выражения в новый файл

У меня есть список устройств:

  • ИПК-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"]
Другие вопросы по тегам