我有一个带有JSON格式字符串的Bash变量。
FOO="[{\"name\": \"${NAME}\", \"surname\": \"${SURNAME}\"}]"
然后在带有sed。
的文件中替换此变量的内容 sed -ie "s/<FOO>/$FOO/g" bar.txt
例如,如果NAME=John
和SURNAME=Doe
,我需要bar.txt
中的字符串正好是"[{\"name\": \"John\", \"surname\": \"Doe\"}]"
,但是sed正在删除反斜杠。
那么,我该如何设法替换呢?试图使用反斜杠的三元组(例如\\\"name
...)但它也不起作用。
答案 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