我有一个看起来像这样的字符串。注意前面的空格。我想替换包含此字符串>"${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
我在正则表达式方面不是那么好。
答案 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代码,但一般来说这种方法非常脆弱。创建完全收敛的替代品通常很困难,有时甚至是不可能的。查看line
或poise-file
等烹饪书籍,了解更精炼的API表示为自定义资源的示例,但我们建议尽可能使用完全融合的资源,例如template
或cookbook_file
那种事。