Intereting Posts
Инструмент Diff с хорошим выходом, например kdiff3 Как проверить версию xargs? zsh – проверить аргументы команды перед ее выполнением Помощь с регулярным выражением в grep Почему я не могу использовать аутентификацию открытого / закрытого ключа с помощью ssh в Arch Linux? Разделение экрана GNU: как отображать активную панель в заголовке Как вставить текст в файл root, используя sudo? Mint 17 через EFI-заглушку на 32-битном MacBook, клавиатура не работает; отлично с загрузчиком Grub отображения адресного пространства ядра в отношении виртуального адресного пространства – вопрос, основанный на тексте Роберта Лава Приложения по умолчанию (GNOME 3) Лучше ли использовать $ (pwd) или $ PWD? Нужна помощь в установке графического драйвера NVIDIA для конфигурации Optimus ifconfig: setifdhcp: операция не поддерживается Странное поведение скрипта bash Запуск GNU Parallel в фоновом режиме?

Как экранировать символы новой строки для 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' действительно удалит символы новой строки, это именно то, что вы просите это сделать.)