2016-01-22 65 views
-1

我想知道我可以在我所有的rspec的文件,這樣的代碼替換:用它替換紅寶石一個襯墊;端塊

describe ApiController do 
    context 'article list exist' do 
     #... 
     it { should respond_with :success } 

     it { should render_template 'refresh_article_in_article_list' } 
    end 
end 

describe ApiController do 
    context 'article list exist' do 
    #... 
    it do 
     should respond_with :success 

     should render_template 'refresh_article_in_article_list' 
    end 
    end 
end 

我可以用vim宏替換之一,但不是成功多行。

隨着幫助this post我一直試圖做的紅寶石GSUB但我失敗了,我會不斷搜索:

"it { should respond_with :success }\n\nit { should render_template 'refresh_article' }".gsub(/(?<value>{.*})|(it {)|(})/, 'it do \k<value>\nend')) 
=> "it do \\nend should respond_with :successit do \\nend\n\nit do \\nend should render_template 'refresh_article'it do \\nend" 
+0

你有多少個?也許只是用手改變它們而忘記它? –

+0

@ sergio-tulentsev我可能有超過15000條這樣的一行。 :) – Mio

回答

4
$ cat tst.awk 
NF { 
    prevSpaces = spaces 
    spaces = $0 
    sub(/[^[:space:]].*/,"",spaces) 
} 
!inBlock && /it *{.*}/ { 
    print spaces "it do" 
    inBlock = 1 
} 
inBlock { 
    if (!NF) { 
     print 
    } 
    else if (gsub(/.*it *{ *| *} */,"")) { 
     print spaces " " $0 
    } 
    else { 
     print prevSpaces "end" 
     inBlock = 0 
    } 
} 
!inBlock 
$ 
$ awk -f tst.awk file 
describe ApiController do 
    context 'article list exist' do 
     #... 
     it do 
      should respond_with :success 

      should render_template 'refresh_article_in_article_list' 
     end 
    end 
end 

不知道它做什麼?添加一些「打印」以查看字段和/或變量的設置,並閱讀由Arnold Robbins撰寫的「有效的Awk編程」第4版,以及後續的具體問題(如果有的話)。

+0

感謝@ ed-morton爲您解答。我已經更新了更多上下文的問題。我嘗試沒有成功。 – Mio

+1

我錯了。它像一個魅力。我在一個大文件上測試過。將明確地認識到下一次會做更多的事情。 – Mio