Sed和替换字符'\'的字符串
问题描述:
我有一个JSON格式的字符串的Bash变量。Sed和替换字符''的字符串
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
...),但它也没有工作。
答
有很多方法可以做到这一点;尝试:
FOO='[{\\"name\": \\"'${NAME}'\\", \\"surname\\": \\"'${SURNAME}'\\"}]"'
在分配
,即使用单引号和不嵌入的名字和姓氏在一个字符串,而不是让壳来连接一切。这将防止bash插入反斜杠。如果你
echo $FOO
你将能够看到这是如何影响分配给FOO的值。
(这不是sed的那去除反斜杠,它是bash。)
答
试试这个:
FOO='[{\"name\": \"John\", \"surname\": \"Doe\"}]'
sed -ie "s/<FOO>/${FOO//\"/\\\"}/g" bar.txt
+0
检查我更新的问题,对不起,这是对以前被删除的答案的评论。其实John和Doe是其他变量,所以我不能使用'''作为字符串分隔符,需要使用''''。 – yzT
忘了提,约翰和李四实际上是其他bash的变量,所以我不能用单因为它会将它们解析为字符串(例如'“name”:“$ NAME”而不是'“name”:“John”') – yzT
对不起,只好离开了。根据你对这个问题的改变进行了修改。 –