我有一个文本文件,我需要在厨师食谱中编辑。 我需要找到这个特定的行(粗体),并在其下面插入配置。
.
.
.
# PLACE YOUR CONFIGURATION MEMORY start up here :
<INSERT MEMORY ARGUMENTS HERE>
.
.
.
.
以下是我一直在尝试的内容。我想知道Ruby中是否存在某种功能 在哪里可以找到一条线然后在该线下方添加新条目?
ruby_block "edit the configuration file " do
block do
text = File.read(file_name)
replace = text.sub(/# PLACE YOUR CONFIGURATION MEMORY start up here :/, "MEM_ARGS=-Xms512m -Xmx1024m");
File.write(file_name, replace)
end
end
我不想替换评论部分,我只是想利用它作为锚点,我可以添加新的文本行。
答案 0 :(得分:3)
在Chef中执行此操作的正确方法是line
食谱,其中包含用于管理此类就地文件操作的资源。但是,我们强烈建议不要使用它,因为使用非收敛系统编写错误的正则表达式或其他东西很容易。使用template
资源管理整个文件是首选。
答案 1 :(得分:2)
试试这个
File.open('input') do |i|
File.open('output', 'w') do |o|
while line = i.gets
o.puts line
if line.chomp == "# PLACE YOUR CONFIGURATION MEMORY start up here:"
o.puts "MEM_ARGS=-Xms512m -Xmx1024m"
end
end
end
end
`mv output input`
这是如何运作的?
Errno::ENOENT
删除尾随换行符chomp
块自动关闭两个文件do end