Como posso substituir uma nova linha pela sequência de escape?

3

Usar sed para tornar o texto que contém certos caracteres adequados para uso em literais de string é simples:

sed "s/\\/\\\\/g"
sed "s/\\"/\\\\"/g"

Mas como posso fazer algo semelhante com um arquivo de texto contendo caracteres de nova linha?

    
por Melab 12.08.2015 / 15:34

4 respostas

3

Uso:

sed ':a;N;$!ba;s/\n/\n/g'

Que usa a resposta de Como posso substituir uma nova linha (\ n) usando sed? substituindo um caractere de nova linha de escape como a substituição para coincidir com a questão aqui.

    
por 19.02.2018 / 04:19
0

sed é baseado em linha, e isso pode causar problemas ao tentar substituir caracteres de nova linha.

a documentação oficial do sed faz uma referência específica aos caracteres da nova linha e afirma que eles são retirados antes de serem passados para o sed.

Eu sugeriria que 'tr' provavelmente seria mais adequado aqui.

como exemplo, para substituir caracteres de nova linha por espaços:

tr '\n' ' ' < inputfile
    
por 12.08.2015 / 16:01
0

Gostaria de estender a solução David Moytan :

cat /etc/passwd | perl -e 'while(<>) { $_ =~ s/[\r\n]/__NEWLINE__/g; print "$_" }'
    
por 12.08.2015 / 16:11
0

Eu também tive esse problema.

Você pode usar a função \ a para iniciar cada nova linha com a sequência de escape apropriada e depois canalizar a função resultante para echo -n, o que suprime as novas linhas.

echo -n $(sed '\a
\n');

Cole tudo o que você está seduzindo entre parênteses antes do comando sed.

    
por 18.01.2018 / 02:10

Tags