如何在shell中将ruby变量传递给sed命令?

时间:2013-08-23 00:49:31

标签: ruby bash net-ssh

这是我的代码。我想抓住p的值,并在匹配1时将其插入到文件changed.txt中。但是它没有做我想做的事情,似乎它不知道#{p}是什么

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

1 个答案:

答案 0 :(得分: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"