2015-05-21 35 views
0

我有設備的列表:編寫正則表達式導致到一個新文件

  • IPC-bei640-R-BR-01
  • IPC-bei640-R-BR-02
  • IPC -bei640-R-BR-03
  • IPC-bei640-R-BR-04
  • IPC-bei640-R-BR-05
  • IPC-bem640-R-BR-01
  • IPC-bem640 -r-br-02
  • IPC-bem640-R-BR-03
  • IPC-crg660-R-BR-02
  • IPC-geb680-R-BR-04
  • IPC-lgv630-R-BR-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 

現在我似乎無法修復的newfile,在新文件「strippedfile」中總是[「bei640」,「-01」] [「bei640」,「-02」] [「bei640」,「-03」]

我試圖獲得以下格式的所有結果:

  • bei640-01
  • bei640-02
  • bei640-03
  • bei640-04

回答

1

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 
+0

對於wh在做 -/+的立場? – user3820869

+0

這是刪除/添加行的標準git/mercurial/svn語法。 – mudasobwa

+0

嗯nvm我明白:) – user3820869

1

假設你得到的數組是

a = [["bei640", "-02"], ["bei640", "-03"]] 

您可以使用join得到你想要的結果

a.map{|i| i.join } #=> ["bei640-02", "bei640-03"] 

或使用快捷鍵爲mudasobwa回答

a.map(&:join) #=> ["bei640-02", "bei640-03"]