使用sed在Java属性文件中更新属性

19
我想用一个简单的一行sed命令更新Java属性值,而不知道Java属性当前的设置是什么(它可能为空)。
example.java.property=previoussetting

之后

example.java.property=desiredsetting

2
你尝试过什么?(http://mattgemmell.com/2008/12/08/what-have-you-tried/) - Dan Fego
2个回答

30

这将更新您的文件:

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 大师可能会指责我,但在你不想牺牲可读性的情况下,我认为这是最好的选择。

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


22

假设使用Linux Gnu sed,一种解决方案是:

编辑转义'.'字符,即s/example\.java.../,根据Kent的正确评论。

 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  

如果你的sed不支持-i选项,那么你需要管理临时文件,例如:

作为参数传递这个命令可以避免在工作流中管理.bak文件。(2018-08-10添加了BSD sed信息)

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

希望这能帮到你。


尽管 OP 已经接受了这个答案,但是其中的“点”没有被转义,因此它表示“任意字符”,可能会更改文件中错误的属性。这很危险! - Kent
@Kent:危险似乎是一个强烈的词。但感谢您帮助我改进我的帖子。Hoofamon:请查看修订后的帖子,以获取有关Java属性的改进替代方案。祝大家好运。 - shellter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接