2017-08-04 20 views
0

Bash変数にはJSON形式の文字列があります。Sedと文字 ''を持つ文字列を置換する

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

この変数の内容は、SEDのファイルに置き換えられます。例えば

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

NAME=JohnSURNAME=Doe場合、私は正確に"[{\"name\": \"John\", \"surname\": \"Doe\"}]"が、バックスラッシュを削除してsedのようにbar.txt内の文字列を必要としています。

これをどうやって置き換えることができますか?三つ組のバックスラッシュ(例:\\\"name ...)を使用しようとしましたが、どちらも機能しませんでした。

答えて

1

これを行う方法はたくさんあります。試してみてください。割り当てで

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

、すなわち単一引用符を使用して、シェルはすべてのものを連結することを可能にする代わりに、単一の文字列に名前と姓を埋め込むことはありません。そうすれば、bashはバックスラッシュを補間しません。あなた

echo $FOO 

場合は、これはFOOに割り当てられた値をどのように影響するかを確認できるようになります。

+0

はジョンとDOEは、実際に他のbashの変数であることを言及するのを忘れてしまったので、私は、単一使用することはできません'' name ":" name "の代わりに" $ NAME "': "John" ')のように文字列として解析するため、引用符を使用します。 – yzT

+0

申し訳ありません。あなたの質問への変更を考慮して改訂しました。 –

1

はこれを試してみてください(。bashのだ、それはバックスラッシュを取り除くだsedのではないです):

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

私の更新された質問をチェックしてください、それは削除された前の回答へのコメントでした。残念ながらJohnとDoeは他の変数なので、 '' 'を文字列区切り文字として使うことはできません。 – yzT

関連する問題