Como desdobrar parágrafos usando sed

1

Eu tenho um arquivo de texto que contém parágrafos com 76 caracteres com uma linha vazia entre os parágrafos. Gostaria de usar sed para converter isso em um arquivo que tenha uma linha por parágrafo, sem linhas em branco.

Exemplo de entrada:

Start of p1
continued p1
end of p1.

Start of p2
end of p2.

Start of p3
continued p3
even more p3
end of p3.

Exemplo de saída:

Start of p1 continued p1 end of p1.
Start of p2 end of p2.
Start of p3 continued p3 even more p3 end of p3.
    
por JoeNahmias 21.06.2016 / 06:02

1 resposta

1

Com o GNU sed

$ sed ':a;N;$!{/\n$/!ba}; s/[[:blank:]]*\n[[:blank:]]*/ /g' textfile
Start of p1 continued p1 end of p1. 
Start of p2 end of p2. 
Start of p3 continued p3 even more p3 end of p3.

Como funciona

  • :a

    Isso define o rótulo a

  • N

    Isso lê a próxima linha e a acrescenta, junto com um caractere de nova linha, à linha atual.

  • $!{/\n$/!ba}

    Se (a) não estamos no final do arquivo e (b) a linha atual não está vazia, então pule (ramifique) de volta para o rótulo a

  • s/[[:blank:]]*\n[[:blank:]]*/ /g'

    Se chegarmos aqui, temos um parágrafo completo no espaço padrão. Procure por todos os caracteres de nova linha, opcionalmente precedidos ou seguidos por espaços em branco, e substitua-os por um espaço em branco.

Com o BSD / OSX sed

Experimente (não testado):

sed -e :a -e 'N;$!{/\n$/!ba' -e '}' -e 's/[[:blank:]]*\n[[:blank:]]*/ /g' textfile

Usando o awk

$ awk '{printf "%s ",$0} /^$/{print ""} END{print ""}' text
Start of p1 continued p1 end of p1.  
Start of p2 end of p2.  
Start of p3 continued p3 even more p3 end of p3. 
    
por 21.06.2016 / 06:17

Tags