Como eu substituo 'p' por 'p \ n' e '/ p' por '\ n / p' usando sed?

1

Tenho o seguinte arquivo e desejo substituir <p> por <p>\n e </p> por \n</p> usando sed .

Meu arquivo de entrada contém as seguintes linhas:

<p>This is home.</p>
<p>These are fruits.</p>

Meu arquivo de saída deve ser como o arquivo abaixo.

<p>
This is home.
</p>
<p>
These are fruits.
</p>
    
por JalT 30.03.2016 / 13:15

2 respostas

4

Você pode fazer:

$ sed 's/<p>/&\n/g;s/<\/p>/\n&/g' file 
<p>
This is home.
</p>
<p>
These are fruits.
</p>

O & no lado direito do operador de substituição é expandido para o que foi correspondido pelo lado esquerdo. Assim, em s/<p>/&\n/ , & será expandido para <p> e em s/<\/p>/\n&/ , será expandido para </p> . O g ( s///g ) faz com que sed substitua todas as ocorrências, portanto também funcionará se você tiver mais de um <p> ou </p> em uma única linha.

    
por terdon 30.03.2016 / 13:21
1

Usando sed :

$ cat file.txt 
<p>This is home.</p>
<p>These are fruits.</p>

$ sed -r 's/^([^>]+>)([^<]+)(<.*)/\n\n/' file.txt 
<p>
This is home.
</p>
<p>
These are fruits.
</p>
    
por heemayl 30.03.2016 / 13:21