我想要一个简单的一行sed
来更新java属性值。不知道java属性的当前设置是什么,它可能是空的)
前
example.java.property=previoussetting
后
example.java.property=desiredsetting
答案 0 :(得分:16)
这将更新您的文件:
sed -i "/property.name=/ s/=.*/=newValue/" yourFile.properties
这将打印成一个新文件
sed "/property.name=/ s/=.*/=newValue/" yourFile.properties > newFile.properties
这是更新多个属性的方法
sed -i -e "/property.name.1=/ s/=.*/=newValue1/" -e "/property.name.2=/ s/=.*/=newValue2/" yourFile.properties
sed 的大师可能会责怪我,因为这不是最合适的方式(例如我没有逃脱这些点)但我认为这是你最好的选择#39;想要牺牲可读性。
以下进行了扩展讨论: How do I use sed to change my configuration files, with flexible keys and values?
答案 1 :(得分:14)
假设Linux Gnu sed,1个解决方案将是
修改转义'。'肯特
每次正确评论都要s/example\.java.../
replaceString=desiredsetting
sed -i "s/\(example\.java\.property=\).*\$/\1${replaceString}/" java.properties
例如,如果您在Mac上使用BSD sed
,则需要向-i
提供参数以指示备份文件名。幸运的是,你可以使用
sed -i '' ""s/\(example\.java\.property=\).*\$/\1${replaceString}/" java.properties
作为参数,避免在工作流程中管理.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
我希望这会有所帮助。