改行文字を含むファイルがあります。curl
経由でjsonとして解析するサーバーにファイルを投稿しています。
改行文字が原因でリクエストを拒否します。
しかし、私がするとき:
$(echo "$MY_DATA" | sed 's/$//' | tr -d '\n\r')
動作しますが、改行文字はなくなりました。
改行文字を保持するようにテキストをエスケープするにはどうすればよいですか?
私は試した tr '\n' '\\n'
およびsed 's/\n/\\n/g
とどちらのアプローチも機能しなかった
生の改行文字を\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'
は実際に改行を削除します。これはまさにあなたがそうするように求めていることです。)