Измените значение свойства в файле свойств из оболочки script

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

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

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

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

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

Ответ 1

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

Ответ 2

Если ваш файл свойства разделен знаком = следующим образом:

param1=value1
param2=value2
param3=value3

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

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

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

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

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

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

Ответ 3

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

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