Hmm ... essa substituição do Vi não funciona em nenhum editor Vi em que tentei. Você provavelmente quis dizer :%s/\\n/ /g
, o que funcionaria no Vim, mas não no Vi.
$ sed '/\$/{N;s/\\n/ /;}' file
line 1 line 2
line 3
line 4 line 5
Isso detecta se a linha atual termina com uma barra invertida e, se houver, acrescenta a próxima linha ( sed
adicionará um caractere de nova linha entre eles), substitui a barra invertida e a nova linha por um caractere de espaço.
Isso falhará se duas linhas consecutivas tiverem barras invertidas no final. Para isso, use algo como
sed ':top;/\$/{N;s/\\n/ /;btop;}' file
Aqui, se uma linha com barra invertida tiver sido processada, o código voltará ao início.
Versão anotada do último script sed
:
:top; # define label "top"
/\$/{ # the line ends with backslash
N; # append next line to pattern space with embedded newline
s/\\n/ /; # substitute backslash and newline with space
btop; # branch to "top"
}
# (implicit print)