使用Chef和Ruby替换它们之间的字符串

时间:2017-09-04 11:28:02

标签: ruby regex chef

我有一个看起来像这样的字符串。注意前面的空格。我想替换包含此字符串>"${WLS_REDIRECT_LOG}"的这一行。

${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} -Dweblogic.Name=${SERVER_NAME} -Djava.security.policy=${WLS_POLICY_FILE} ${JAVA_OPTIONS} ${PROXY_SETTINGS} ${SERVER_CLASS}  >"${WLS_REDIRECT_LOG}" 2>&1

我只是不知道我的正则表达式是否正确匹配

mynewline = "TESTTTIIINGGG!!!"
ruby_block "Editing File" do
  block do
    fe = Chef::Util::FileEdit.new("myFile.sh")
    fe.search_file_replace_line(/*>"${WLS_REDIRECT_LOG}"*/, mynewline)
    fe.write_file
  end
  #only_if { File.read("myFile.sh")
end

我在正则表达式方面不是那么好。

2 个答案:

答案 0 :(得分:3)

你不需要厨师,普通的老红宝石很好:

corrected = File.read('myFile.sh')
corrected[/>"\$\{WLS_REDIRECT_LOG\}"/] = "TESTTTIIINGGG!!!"
File.write('myFile.sh', corrected)

更多信息:String#[]=

答案 1 :(得分:1)

FileEdit是Chef内部的API,不建议将其用于cookbook代码。虽然您可以使用其他答案中提到的其他Ruby代码,但一般来说这种方法非常脆弱。创建完全收敛的替代品通常很困难,有时甚至是不可能的。查看linepoise-file等烹饪书籍,了解更精炼的API表示为自定义资源的示例,但我们建议尽可能使用完全融合的资源,例如templatecookbook_file那种事。