Usando o GNU awk:
$ awk '{printf "%s%s%s","line=",$0,RT}' RS='[^\\]\n' text
line=entry1line1
line=entry2line1\
entry2line2\
entry2line3
line=entry3line1
Como você pode ver, as linhas que terminam com \
são unidas à próxima linha. Isso ocorre porque o separador de registro RS
foi redefinido como qualquer barra invertida seguida por uma nova linha. Em outras palavras, a barra invertida-nova linha não é um separador de registro.
Um pequeno truque aqui é que o separador de registro engole o último caractere do registro. Esse caractere, no entanto, é salvo para nós na variável interna RT
. Uma pequena alteração no programa corrige o valor de $0
no início do código para que esse problema desapareça:
$ awk '{$0=$0 substr(RT,1,1)} {print "line=",$0}' RS='[^\\]\n' text
line= entry1line1
line= entry2line1\
entry2line2\
entry2line3
line= entry3line1
RT
contém todo o separador de registros observado real. No nosso caso, isso significa que ele tem o último caractere do registro e o caractere de nova linha que se segue. Conseqüentemente, no código acima, substr
é usado para adicionar o primeiro caractere de RT
ao final de $0
.