我正在尝试编写一个脚本来配置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的新手,所以请原谅我在这方面缺乏技能。
答案 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"
~$