带有大括号和双引号值的 sed 命令失败

sed command failure with curly braces and double quotes values

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

(ABC)

我使用以下命令创建了一个环境变量

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

然后我运行 sed 命令

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

这个return与这个

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

实际上应该return这个

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

关于我遗漏的任何想法

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 与问题无关)。