Ответ 1
sed
может использовать символы, отличные от /
, в качестве разделителя, хотя /
является наиболее распространенным. Когда вы занимаетесь такими вещами, как pathnames, часто полезно использовать что-то вроде pipe (|
).
Название говорит все. Мне нужно заменить значение свойства, которое я не знаю, для другого значения. Я пытаюсь это сделать:
#!/bin/bash
sed -i "s/myprop=[^ ]*/myprop=$newvalue/g" file.properties
я получаю sed: -e expression #1, char 19: unknown option to
s'`
Я думаю, что проблема заключается в том, что $newvalue
- это строка, представляющая каталог, так что он помешает sed.
Что я могу сделать?
sed
может использовать символы, отличные от /
, в качестве разделителя, хотя /
является наиболее распространенным. Когда вы занимаетесь такими вещами, как pathnames, часто полезно использовать что-то вроде pipe (|
).
Если ваш файл свойства разделен знаком =
следующим образом:
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), которая содержит новое значение параметра.
Я нашел функцию от кого-то по имени Конгэн. Он написал функцию script для изменения значений свойств, и она отлично работала для меня:
Проверьте это: https://gist.github.com/kongchen/6748525