2013-08-23 110 views
0

這是我的代碼。我想抓住p的值,並在匹配1時將其插入到文件changed.txt中。但它沒有做我想做的事,似乎它不知道什麼是{{p}是如何將ruby變量傳遞給Shell中的sed命令?

Net::SSH.start("192.168.2.1", "root", :password => "password") do |ssh| 
    p = ssh.exec! "java -cp /var/lib/sonar/dev-tools.jar au.com.Tool test" 
# puts #{p} 
    ssh.exec! "sed 's/1/#{p}/g' changed.txt" 
end 
+0

你能分享它實際上做了什麼嗎?你的'puts'調試語句應該是'puts'#{p}「'。你在'sed'正則表達式中得到了什麼?#{p}'?我運行了一個類似於此的測試用例,它工作正常。 – lurker

+0

我想用p的值替換1; changed.txt裏面只包含1個。但是對於當前的代碼,changed.txt仍然有1,根本沒有任何變化.. – gugo

回答

2

通過p價值的方式,你應該可以正常工作。但是,sed命令不會更改該文件。如果你想讓它改變的地方文件,使用-i選項,如下所示:

ssh.exec! "sed -i 's/1/#{p}/g' changed.txt" 

或者,如果你想在不同的文件中的更改,然後使用:

ssh.exec! "sed 's/1/#{p}/g' changed.txt > newfile.txt" 

另一種選擇是是:

ssh.exec! "sed -i 's/1/" + p + "/g' changed.txt" 
+0

我認爲'/ 1 /#{p}/g'#{p}也可以工作,但是,當它傳入sed ,它沒有價值,因爲changed.txt仍然是一樣的,沒有改變。還要感謝糾正我的調試提出「#{p}」。 – gugo

+0

@gugo,你的'puts'爲'p'是否給你一個非零輸出?這種情況下'p'的值是多少? – lurker

+0

把「#{p}」確實輸出值619A72E67F796BD2。 dev-tools.jar是一個生成加密文本的工具(在這種情況下,測試如上所述),我希望它替換changed.txt中的舊文本。 – gugo