Изменить значение свойства в файле свойств из сценария оболочки - PullRequest
11 голосов
/ 22 декабря 2011

Название говорит все. мне нужно заменить значение свойства, которое я не знаю, на другое значение. я пытаюсь это:

#!/bin/bash
sed -i "s/myprop=[^ ]*/myprop=$newvalue/g" file.properties

я получаю sed: -e expression #1, char 19: unknown option to s'`

Я думаю, что проблема в том, что $newvalue - это строка, представляющая каталог, поэтому она портит sed.

Что я могу сделать?

Ответы [ 3 ]

7 голосов
/ 22 декабря 2011

Если ваш файл свойств разделен знаком =, например, -

param1=value1
param2=value2
param3=value3

, тогда вы можете использовать awk do, чтобы изменить значение параметра , просто зная имя параметра .Например, если мы хотим изменить param2 в вашем файле свойств, мы можем сделать следующее -

awk -F"=" '/param2/{$2="new value";print;next}1' filename > newfile

Теперь приведенный выше one-liner требует от вас жесткого кода новое значение парам.Это может быть не так, если вы используете его в сценарии оболочки и вам нужно получить новое значение из переменной.

В этом случае вы можете сделать следующее -

awk -F"=" -v newval="$var" '/param2/{$2=newval;print;next}1' filename > newfile

. В этом мы создадим awk переменную newval и инициализируем ее переменной сценария ($ var), которая содержитновое значение параметра.

7 голосов
/ 22 декабря 2011

sed может использовать символы, отличные от /, в качестве разделителя, хотя / является наиболее распространенным. При работе с такими вещами, как имена путей, часто бывает полезно использовать что-то вроде pipe (|).

1 голос
/ 15 февраля 2018

Я нашел функцию от кого-то по имени Kongchen.Он написал скрипт функции для изменения значений свойств, и он отлично работал для меня:

Проверьте это: https://gist.github.com/kongchen/6748525

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...