我正在尝试创建一个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"
这很有效,所以我知道现在该做什么。
答案 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"