効率的である必要があるため、jq
大容量のバイナリ実行可能ファイルをロードするなどのツールは使用できません。 JSONで安全にするために、文字列から二重引用符をエスケープしたいと思います。十分ではありません。
echo ' bad \" string"' | sed 's/"/\\"/g'
すでにエスケープされた二重引用符をエスケープするためです。エスケープされていない場合にのみ二重引用符を置き換える方法はありますか?
ベストアンサー1
"
おそらく前に行かない限りエスケープが欲しいでしょう\
。
echo ' bad \" string"' | sed -E 's/([^\]|^)"/\1\\"/g'
説明する
これはと一致しますが、前に、つまり ""以外の文字(または行の先頭)"
がある場合にのみ一致します。しかし、この新しいキャラクターはそれ自体で置き換えられるので、それをキャプチャグループにキャプチャし、再び一致するキャラクターに置き換える必要があります。この例では、単純化のために拡張正規表現を使用しています。[^\]
\
^
()
\1
-E