2017-07-26 132 views
0

我有以下内容sed命令失败值

(ABC) 

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

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

然后我跑sed命令文件

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

此方法返回此

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

它shuld实际上什么我缺少

+0

可能是shell问题......在bash上为我工作......'s =“{'key':{'key':'value'}}”''后跟'echo'(ABC)'| sed's /(ABC)/('“$ s”')/''give'({'key':{'key':'value'}})' – Sundeep

+0

谢谢Sandeep,我已经更新了问题实际值,http中的'/'是一个问题,所以我用管道,但现在遇到了其他问题,你可以看看更新的问题吗? –

+0

再次,它适用于我在bash ...我的猜测仍然是无论你使用的外壳可能需要其他工作 – Sundeep

回答

0

由于braces and double quotes are metacharacters in C shell返回此

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

任何想法,你必须要么使用反斜线逃避他们,就像这样:

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

+1

请注意,在csh/tcsh下的sed中,即使使用单引号,也需要转义'!'。 – stevesliva