Как экранировать символы новой строки для JSON?

У меня есть файл, который содержит символы новой строки.
Я отправляю файл через curl на сервер, который будет обрабатывать его как json.
Он отклоняет запрос из-за новой строки символов.
Но, когда я делаю:

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

Это работает, но символы новой строки исчезли.
Как я могу экранировать текст, чтобы он сохранял символы новой строки?
Я пробовал tr '\n' '\\n' и sed 's/\n/\\n/g но ни один из подходов не помог

Я предполагаю, что вы хотите изменить необработанные символы новой строки на \n (обратный слеш и n ).

tr '\n' '\\n' изменит символы новой строки на обратную косую черту (а затем во втором наборе будет дополнительный n ). sed 's/\n/\\n/g не будет работать, потому что sed не загружает завершающую строку новую строку в буфер, а обрабатывает ее внутренне.

Некоторыми альтернативами являются GNU sed с -z (принимает входные данные как разделенные NUL “строки”, а не разделенные символом новой строки):

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

и Perl (в отличие от sed, он принимает новую строку в буфере, поэтому s/// работает с ним):

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

( tr -d '\n\r' действительно удалит символы новой строки, это именно то, что вы просите это сделать.)