2017-09-04 23 views
0

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

 ${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

问“请帮助我”的问题往往是寻找高度本地化的指导,或者在某些情况下,寻求持续或私人的协助,这不适合我们的问答格式。它也相当模糊,更好地用更具体的问题来代替。请阅读[为什么“有人可以帮助我?”不是一个实际的问题?](// meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-actual-question )。 – halfer

回答

2

你不需要为厨师,普通的旧良好的红宝石是好的:

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

更多信息:String#[]=

+0

在资源之外这样做通常会产生意想不到的效果。 – coderanger

1

FileEdit是Chef中的一个内部API,不推荐用于食谱代码。虽然您可以使用其他Ruby代码,但通常这种方法非常脆弱。创建完全收敛的替代品通常很困难,有时甚至是不可能的。请查看linepoise-file等烹饪书,了解更多精炼的API,这些API以自定义资源表示,但我们建议尽可能使用完全收敛的资源,例如templatecookbook_file

相关问题