使用sed更新java属性文件中的属性

Zug*_*dud 13 java sed

我想要一个简单的单行程序sed来更新java属性值.不知道java属性的当前设置是什么,它可能是空的)

之前

example.java.property=previoussetting
Run Code Online (Sandbox Code Playgroud)

example.java.property=desiredsetting
Run Code Online (Sandbox Code Playgroud)

Den*_*isS 17

这将更新您的文件:

sed -i "/property.name=/ s/=.*/=newValue/" yourFile.properties
Run Code Online (Sandbox Code Playgroud)

这将打印到一个新文件中

sed "/property.name=/ s/=.*/=newValue/" yourFile.properties > newFile.properties
Run Code Online (Sandbox Code Playgroud)

这是更新多个属性的方法

sed -i -e "/property.name.1=/ s/=.*/=newValue1/" -e "/property.name.2=/ s/=.*/=newValue2/" yourFile.properties
Run Code Online (Sandbox Code Playgroud)

sed的大师可能会怪我,因为这不是最合适的方式(例如我没有逃脱点)但我认为这是你不想牺牲可读性时的最佳选择.

以下是扩展讨论: 如何使用sed更改配置文件,灵活的键和值?


she*_*ter 14

假设Linux Gnu sed,将有1个解决方案

编辑逃脱'.' 字符即s/example\.java.../肯特的正确评论

 replaceString=desiredsetting
 sed -i "s/\(example\.java\.property=\).*\$/\1${replaceString}/" java.properties
Run Code Online (Sandbox Code Playgroud)

sed例如,如果您在Mac上使用BSD ,则需要提供一个参数-i来指示备份文件名.幸运的是,你可以使用

 sed -i '' ""s/\(example\.java\.property=\).*\$/\1${replaceString}/" java.properties  
Run Code Online (Sandbox Code Playgroud)

作为参数,避免必须管理.bak工作流程中的文件.(BSD sed信息已添加2018-08-10)

如果你的sed不尊重-i,那么你必须管理tmp文件,即

    sed "s/\(example\.java\.property=\).*\$/\1${replaceString}/" java.properties > myTmp
    /bin/mv -f myTmp java.properties
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.