Inserir nova linha após todas as ocorrências de um padrão

2

Eu tenho um arquivo pmml contendo uma linha:

<DataField dataType="string" name="class" optype="categorical"><Value value="y0" /><Value value="y1" /><Value value="y2" /><Value value="y3" /><Value value= "y4" /></DataField><DataField dataType="double" name="x0" optype="continuous" /><DataField dataType="double" name="x1" optype= "continuous" /><DataField dataType="double" name="x2" optype="continuo    us" /><DataField dataType="double" name="x3" optype="continuous" /><DataField dataType="double" name="x4" optype="continuous" /><DataField dataType="double" name="x5" optype="continuous" /><DataField dataType="double" name="x6" optype="continuous" /><DataField dataType="double" name="x7" optype="continuous" /><DataField dataType="double" name="x8" optype="continuous" /><DataField dataType="double" name="x9" optype="continuous" /><DataField dataType="double" name="x10" optype="continuous" /><DataField dataType="double" name="x11" optype="continuous" /><DataField dataType="double" name="x12" optype="continuous" /><DataField dataType="double" name="x13" optype="continuous" /><DataField dataType="double" name="x14" optype="continuous" /><DataField dataType="double" name="x15" optype="continuous" /><DataField dataType="double" name="x16" optype="continuous" /><DataField dataType="double" name="x17" optype="continuous" /><DataField dataType="double" name="x18"     optype="continuous" /><DataField dataType="double" name="x19" optype="continuous" /><DataField dataType="double" name="x20" optype="continuous" /><DataField dataType="double" name="x21" optype="continuous" /><DataField dataType="double" name="x22" optype="continuous" /><DataField dataType="double" name="x23" optype="continuous" /></DerivedField></NeuralOutput></NeuralOutputs></NeuralNetwork></PMML>   

Eu quero inserir uma nova linha depois de todas as ocorrências optype= "continuous" /> .

Consegui inserir a nova linha entre o primeiro optype e o último /> usando sed 's:optype.*/>:a&\n:g' test.pmml > new.pmml .

Como posso fazer isso para todas as ocorrências do padrão? (Eu prefiro sed, mas soluções usando outras ferramentas também estão bem.)

    
por Danial Rahmani 02.07.2018 / 19:15

2 respostas

3

Você pode tentar isso com o GNU sed ou outras implementações sed que agora também tratam \n como nova linha na substituição:

sed 's|optype[^>]*/>|&\n|g' test.pmml

POSIXly:

sed 's|optype[^>]*/>|&\
|g' test.pmml
    
por 02.07.2018 / 21:10
0

Se o que você quer fazer é formatar bem o seu arquivo XML, algo como XMLStarlet pode fazer isso para você:

xmlstarlet fo file.xml >new-file.xml

O fato de seu arquivo XML ser um arquivo pmml não deve importar, contanto que pmml seja um formato XML.

XMLStarlet é uma ferramenta XML geral para executar consultas XPATH etc., mas também existem ferramentas específicas para formatar documentos XML, como Tidy .

    
por 03.07.2018 / 07:50