pt tags de parágrafo sed

1

Como posso moldar parágrafos em texto simples com tags de parágrafo {p} before e {/p} após cada parágrafo usando sed ? Cada parágrafo é separado por linhas em branco. Eu posso usar sed -e 's/^\s*$/<r>/ somefile.txt para encontrar todas as linhas em branco no arquivo de texto, mas isso sempre irá inserir {p} em todos os lugares e eu não entendi muito bem, como variá-los. Além disso, não há linha vazia após o último parágrafo, por isso não fará nada para o último.

texto de entrada:

Section 5. General Information About Project Gutenberg-tm electronic
works.

Description

Professor Michael S. Hart is the originator of the Project Gutenberg-tm
concept of a library of electronic works that could be freely shared
with anyone.

Project Gutenberg-tm eBooks are often created from several printed
editions, all of which are confirmed as Public Domain in the U.S. unless
a copyright notice is included.

Saída exigida:

Section 5. General Information About Project Gutenberg-tm electronic
works.
{p}
Description
{/p}
{p}
Professor Michael S. Hart is the originator of the Project Gutenberg-tm
concept of a library of electronic works that could be freely shared
with anyone.
{/p}
{p}
Project Gutenberg-tm eBooks are often created from several printed
editions, all of which are confirmed as Public Domain in the U.S. unless
a copyright notice is included.
{/p}
    
por Daicem 10.05.2017 / 11:06

2 respostas

0

Como você solicitou originalmente uma solução sed , eu adiciono uma:

sed '/./{H;1h;$! d}
g;/{p}$/d
s#^{p}.*#&\n{/p}#;p
s/.*/{p}/;h;d' somefile.txt

Explicação

  • linha 1: Anexe linhas não vazias ao buffer de suspensão (1ª linha copiada em vez de anexada para evitar começar com nova linha). Continue para linhas vazias ou fim do arquivo.
  • linha 2: Ignore os buffers sem texto para manipular várias linhas vazias ou linhas vazias no final do buffer
  • linha 3: se houver uma tag de abertura, adicione uma tag de fechamento. Em seguida, imprima.
  • linha 4: preencha o buffer de retenção com uma nova tag de abertura.
por 10.05.2017 / 14:14
0

Eu sugeriria a abordagem awk :

awk 'NR>1 && NF{$0="{p}" RS $0 RS "{/p}"}1' file

A saída:

Section 5. General Information About Project Gutenberg-tm electronic works.

{p}
Description
{/p}

{p}
Professor Michael S. Hart is the originator of the Project Gutenberg-tm concept of a library of electronic works that could be freely shared with anyone. For thirty years, he produced and distributed Project Gutenberg-tm eBooks with only a loose network of volunteer support.
{/p}

{p}
Project Gutenberg-tm eBooks are often created from several printed editions, all of which are confirmed as Public Domain in the U.S. unless a copyright notice is included. Thus, we do not necessarily keep eBooks in compliance with any particular paper edition.
{/p}

RS - separador de registro do awk, padrão para a nova linha \n

NR>1 - ignora a primeira linha cabeçalho

NF - aponta para o número total de campos da linha (considerando linhas não vazias)

    
por 10.05.2017 / 11:47