2017-07-26 64 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