使用rails模板将行插入文件

时间:2010-09-14 19:27:53

标签: ruby-on-rails ruby templates sed

我正在尝试创建一个rails模板,它将代码添加到特定行号的文件中。例如,我需要添加一个到config / routes.rb的路由

我试过sed,gsed(只因为我在Mac上,他们说sed有插入和追加问题),无论如何,我无法达到我想要的结果。

对此的任何帮助将不胜感激。

我已经尝试了这个命令的几个排列,但没有一个工作,这是一个例子

run "gsed '3 a/This is it' config/routes.rb"

或许甚至是另一个建议

EDIT ::::::

好吧,我休息一下,当我回来读完sed后,我意识到我需要将流写回文件,但我之前就是这样做的,

run  "gsed '2 a\
Add this line after 2nd line
' config/routes.rb > config/routes.rb"

但路由文件是空白的,所以我尝试使用不同的文件名(new.routes.rb),

run  "gsed '2 a\
Add this line after 2nd line
' config/routes.rb > config/new.routes.rb"

这很有效,所以我知道现在该做什么。

3 个答案:

答案 0 :(得分:16)

由于行号随着文件的发展而变化,因此最好在现有字符串表达式之前或之后插入新代码。在模板生成器中,您可以执行以下操作:

inject_into_file 'config/application.rb', :before => "  end" do
  "\n    config.logger = Logger.new(config.paths.log.first, 50, 1048576)\n\n"
end

注意,您可以使用:after:if之前不符合您的需求。

答案 1 :(得分:0)

我不得不想知道你为什么要使用sed。编写一个Ruby脚本来打开文件,逐行读取,进行更改并将文件写回。关于你将要遇到的唯一问题是“就地”编辑文件。要解决这个问题,请打开temporary file,写入该文件,然后使用File.move将该文件移到旧文件上。

答案 2 :(得分:0)

这将解决问题,只需记住删除旧的并在其位置重命名新的

run  "gsed '2 a\
Add this line after 2nd line
' config/routes.rb > config/new.routes.rb"