web-dev-qa-db-ja.com

jsonの改行文字をエスケープする方法は?

改行文字を含むファイルがあります。
curl経由でjsonとして解析するサーバーにファイルを投稿しています。
改行文字が原因でリクエストを拒否します。
しかし、私がするとき:

$(echo "$MY_DATA" | sed 's/$//' | tr -d '\n\r')  

動作しますが、改行文字はなくなりました。
改行文字を保持するようにテキストをエスケープするにはどうすればよいですか?
私は試した tr '\n' '\\n'およびsed 's/\n/\\n/gとどちらのアプローチも機能しなかった

5
Jim

生の改行文字を\n(バックスラッシュとn)に変更したいと思います。

tr '\n' '\\n'は、改行をバックスラッシュに変更します(2番目のセットには余分なnがあります)。 sedは行末の改行をバッファにロードしないため、sed 's/\n/\\n/gは機能しませんが、内部的に処理します。

GNU sed with -z(入力を改行で区切るのではなく、NULで区切られた "行"として受け取ります):

sed -z 's/\n/\\n/g'

とPerl(sedとは異なり、それはdoes改行をバッファに入れるため、s///はそれに対して機能します):

Perl -pe 's/\n/\\n/g'

tr -d '\n\r'は実際に改行を削除します。これはまさにあなたがそうするように求めていることです。)

8
ilkkachu