Como escapar de novos caracteres de linha para json?

2

Eu tenho um arquivo que contém novos caracteres de linha.
Eu estou postando o arquivo via curl para um servidor que iria analisá-lo como json.
Ele rejeita a solicitação devido aos novos caracteres de linha.
Mas quando eu faço:

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

Funciona, mas os novos caracteres da linha desapareceram.
Como posso escapar do texto para que ele mantenha os novos caracteres da linha?
Eu tentei tr '\n' '\n' e sed 's/\n/\n/g e nem a abordagem funcionou

    
por Jim 06.07.2018 / 17:01

1 resposta

5

Suponho que você queira alterar os caracteres brutos da nova linha para \n (uma barra invertida e um n ).

tr '\n' '\n' mudaria as novas linhas para as barras invertidas (e, em seguida, há um n extra no segundo conjunto). sed 's/\n/\n/g não funcionará porque sed não carrega a nova linha de terminação de linha no buffer, mas trata-a internamente.

Algumas alternativas são o GNU sed com -z (considera a entrada como "linhas" separadas por NUL, não separadas por nova linha):

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

e Perl (diferente de sed, ele faz pegar a nova linha no buffer, então s/// trabalha nele):

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

( tr -d '\n\r' de fato removerá novas linhas, é exatamente o que você está pedindo para fazer).

    
por 06.07.2018 / 17:32