2017-08-04 179 views
0

我有一个JSON格式的字符串的Bash变量。Sed和替换字符''的字符串

FOO="[{\"name\": \"${NAME}\", \"surname\": \"${SURNAME}\"}]"

此变量的内容,然后在使用sed文件替换。

sed -ie "s/<FOO>/$FOO/g" bar.txt

例如,如果NAME=JohnSURNAME=Doe,我需要在bar.txt的字符串是完全"[{\"name\": \"John\", \"surname\": \"Doe\"}]",但sed的是消除反斜线。

那么,我该如何设法做到这一点呢?试图使用三联反斜杠(例如\\\"name ...),但它也没有工作。

回答

1

有很多方法可以做到这一点;尝试:

FOO='[{\\"name\": \\"'${NAME}'\\", \\"surname\\": \\"'${SURNAME}'\\"}]"' 
在分配

,即使用单引号和不嵌入的名字和姓氏在一个字符串,而不是让壳来连接一切。这将防止bash插入反斜杠。如果你

echo $FOO 

你将能够看到这是如何影响分配给FOO的值。

(这不是sed的那去除反斜杠,它是bash。)

+0

忘了提,约翰和李四实际上是其他bash的变量,所以我不能用单因为它会将它们解析为字符串(例如'“name”:“$ NAME”而不是'“name”:“John”') – yzT

+0

对不起,只好离开了。根据你对这个问题的改变进行了修改。 –

1

试试这个:

FOO='[{\"name\": \"John\", \"surname\": \"Doe\"}]' 
sed -ie "s/<FOO>/${FOO//\"/\\\"}/g" bar.txt 
+0

检查我更新的问题,对不起,这是对以前被删除的答案的评论。其实John和Doe是其他变量,所以我不能使用'''作为字符串分隔符,需要使用''''。 – yzT