Modify key = "Value" config с помощью sed - PullRequest
4 голосов
/ 15 ноября 2011

Я пытаюсь написать сценарий, который настраивает файл конфигурации, используемый другим сценарием. Я пытаюсь использовать sed, как это

sed -c -i "s/\($TARGET_KEY *= *\).*/\1$REPLACEMENT_VALUE/" $CONFIG_FILE

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

Вторая проблема заключается в том, что когда я запускаю это на Mac OS, выдается ошибка:

sed: illegal option -- c
usage: sed script [-Ealn] [-i extension] [file ...]
   sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]

Я новичок в использовании sed, поэтому, пожалуйста, прости мне отсутствие навыков в этой области.

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011

см. Тест ниже, я не добавил "-i", просто напечатал вывод.Вы можете добавить -i, если вам нужно:

kent$  cat c.conf 
key1="value1"
foo   =   "fooValue"
bar="barValue"

kent$  echo $k1
foo

kent$  echo $v1
foo_new

kent$  sed -r "s/($k1 *= *\").*/\1$v1\"/" c.conf
key1="value1"
foo   =   "foo_new"
bar="barValue"
0 голосов
/ 15 ноября 2011

Вы пытались избежать кавычек?Это работает для меня (на Cygwin):

~$ echo -e "key1=\"value1\"\nkey2=\"value2\""
key1="value1"
key2="value2"
~$ TARGET_KEY=key2
~$ REPLACEMENT_VALUE=new_val
~$ echo -e "key1=\"value1\"\nkey2=\"value2\"" | sed "s/\($TARGET_KEY *= *\"\).*/\1$REPLACEMENT_VALUE\"/"
key1="value1"
key2="new_val"
~$
...