使用花括号和双引号值的sed命令失败

时间:2017-07-26 13:56:45

标签: json sed environment-variables tcsh

我有一个包含以下内容的文件

(ABC)

我使用以下命令

创建一个env变量
setenv ABC  {"a":{"b":"http://c","d":"http://e"}}

然后我运行sed命令

sed 's|(ABC)|('"$ABC"')|' myFile

这将返回

a:b:http://c a:d:http://e

它实际上是回归

{"a":{"b":"http://c","d":"http://e"}

关于我缺少的任何想法

1 个答案:

答案 0 :(得分:0)

braces and double quotes are metacharacters in C shell起,您必须使用反斜杠转义它们,如下所示:

setenv ABC \{\"a\":\{\"b\":\"http://c\",\"d\":\"http://e\"\}\}

或者,更好,用单引号包装完整的值:

setenv ABC '{"a":{"b":"http://c","d":"http://e"}}'

无论哪种方式,你都会得到:

$ echo "$ABC"
{"a":{"b":"http://c","d":"http://e"}}

相反,如果您不在setenv语句中转义或引用该值,就像您在问题中所做的那样,您将获得:

$ echo "$ABC"
a:b:http://c a:d:http://e

那是你得到的(sed与问题无关)。