2013-08-16 47 views
0

我爲每個Capistranio部署運行了一打sed命令,我想知道是否有可能將它們鏈接成單個sed命令,而不是在服務器上發射數十個命令。鏈接sed語句

task :taskname do 
    {:'foo' => foo, :'bar' => bar, :'foobar' => foobar, :'fubar' => fubar }.each do |search, replace| 
     run "sed -i 's/#{search}/#{replace}/' file.ext" 
    end 
end 

回答

3

sed本身接受的模式一打(如果你出於某種原因喜歡sed):

{:foo => foo, :bar => bar, :foobar => foobar, :fubar => fubar}.inject("") do |acc, k, v| 
    acc += " -e 's/#{k}/#{v}'" 
end 

run "sed #{acc} file.ext" 
+0

太好了,非常感謝! – Till

0

是否mudasobwa的代碼工作的?用我的Ruby(v1.9.3),它必須是:

acc = {:foo => foo, :bar => bar, :foobar => foobar, :fubar => fubar}.inject("") do |m, p| 
    m + " -e 's/#{p[0]}/#{p[1]}'" 
end 

run "sed #{acc} file.ext" 
+0

我沒有使用mudasobwa的_exact_代碼,這是我所做的:http://pastebin.com/sVTWqN6e – Till