sed并替换一个字符'\'的字符串

时间:2017-08-04 10:30:32

标签: bash sed

我有一个带有JSON格式字符串的Bash变量。

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 ...)但它也不起作用。

2 个答案:

答案 0 :(得分:1)

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

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

在赋值中,即使用单引号并且不将NAME和SURNAME嵌入到单个字符串中,而是允许shell连接所有内容。这将阻止bash插入反斜杠。如果你

echo $FOO

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

(这不是sed,它正在删除反斜杠,它是bash。)

答案 1 :(得分:1)

试试这个:

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