2012-02-20 2 views
8

Мне нужен простой один лайнер с sed, чтобы обновить значение свойства java. Не зная, что текущее значение свойства Java есть, и оно может быть пустым)Использование sed для обновления свойства в файле свойств java

перед тем

example.java.property=previoussetting 

после

example.java.property=desiredsetting 
+0

[Что вы пробовали?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

ответ

7

Предполагая, что Linux Gnu СЭД, 1 решение будет

Редактирование escaped '.' символы т.е. s/example\.java.../ за правильный комментарий Кент

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

Если ваш СЭД не чтят -i, то вы должны управлять временными файлами, т.е.

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

Я надеюсь, что это помогает.

+0

-1 хотя OP имеет принял этот ответ. «точка» не экранируется, поэтому означает «ЛЮБОЙ символ», это может изменить неправильное свойство в файле. это опасно! – Kent

+0

@Kent: Опасный кажется сильным термином. Но спасибо за то, что помогли сделать мой пост лучше. Hoofamon: см. Пересмотренный пост, чтобы улучшить замену ваших свойств java. Всем удачи. – shellter

9

Это обновит файл:

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 

Gurus из SED может обвинить меня, поскольку это не самый правильный способ сделать это (например, я не избежал точек), но я считаю это лучшим вариантом, когда вы не хотите жертвовать читабельностью.

Вот расширенное обсуждение: How do I use sed to change my configuration files, with flexible keys and values?

Смежные вопросы