使用sed修改key =“Value”配置

时间:2011-11-15 10:15:24

标签: bash sed configuration-files

我正在尝试编写一个脚本来配置nother脚本使用的配置文件。我试图像这样使用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 个答案:

答案 0 :(得分:3)

看下面的测试,我没有添加“-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"

答案 1 :(得分:0)

你试过逃避报价吗?这对我有用(在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"
~$