Eu tenho um arquivo que contém novos caracteres de linha.
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 de linha sumiram.
Como posso escapar do texto para que ele mantenha os novos caracteres de linha?
Eu tentei tr '\n' '\\n'
e sed 's/\n/\\n/g
e nenhuma abordagem funcionou
Suponho que você queira alterar os caracteres de nova linha brutos para
\n
(uma barra invertida e umn
).tr '\n' '\\n'
mudaria as novas linhas para barras invertidas (e então há um extran
no segundo conjunto).sed 's/\n/\\n/g
não funcionará porquesed
não carrega a nova linha de terminação de linha no buffer, mas a manipula internamente.Algumas alternativas são GNU sed com
-z
(toma a entrada como "linhas" separadas por NUL, não separadas por nova linha):e Perl (ao contrário do sed, ele aceita a nova linha no buffer, então
s///
funciona):(
tr -d '\n\r'
de fato, removerá novas linhas, é exatamente isso que você está pedindo para fazer.)Use
jq
para codificar corretamente os dados em JSON:As opções
-s
(--slurp
) e-R
(--raw-input
), quando usadas juntas, lerão os dados brutos de entrada e criarão uma única string codificada em JSON a partir deles.Exemplo:
Resultado: