Inserindo no meio de uma string usando sed

3

Estou tentando inserir uma string em várias linhas usando sed, mas não obtenho o resultado desejado

Eu tenho isso:

<p begin="540960420t" end="600189590t" xml:id="subtitle8">-Some text.<br/>-Some more text</p>
<p begin="601020420t" end="653572920t" xml:id="subtitle9">-Something else<br/>Some more text</p>
<p begin="654403750t" end="731560830t" xml:id="subtitle10">More words<br/>-more text</p>
<p begin="732401670t" end="786625840t" xml:id="subtitle11">Some text.<br/>Some more text</p>

e preciso inserir isso

<span style="style0">

Antes da "legenda [0-200]" > então será assim:

<p begin="540960420t" end="600189590t" xml:id="subtitle8"><span style="style0">-Some text.<br/>-Some more text</p>
<p begin="601020420t" end="653572920t" xml:id="subtitle9"><span style="style0">-Some text.<br/>Some more text</p>

etc ...

Eu estava tentando algo assim:

cat demo.xml | sed 's/xml:id="subtitle[0-9]">/<span style="style0"><p/g'

Mas isso substitui o xml: id="subtitle [0-9]" > e apenas de subtitle0 para subtile9

Eu sou muito novo em todas essas coisas de sed e regexp, se alguma outra coisa for mais fácil que sed, então tudo bem ..

Atenciosamente Soren

    
por SH1986 07.06.2015 / 20:10

2 respostas

3

Você pode fazer:

sed 's/subtitle[0-9]\{1,3\}">/&<span style="style0">/'

Corresponde à legenda [0-200] ao combinar de 1 a 3 dígitos usando \{1,3\} e substitui isso pelo padrão correspondente com <span style... adicionado.

Se você inserir:

<p begin="540960420t" end="600189590t" xml:id="subtitle8">-Some text.<br/>-Some more text</p>

<p begin="601020420t" end="653572920t" xml:id="subtitle9">-Something else<br/>Some more text</p>

<p begin="654403750t" end="731560830t" xml:id="subtitle10">More words<br/>-more text</p>

<p begin="732401670t" end="786625840t" xml:id="subtitle11">Some text.<br/>Some more text</p>

Isto irá produzir

<p begin="540960420t" end="600189590t" xml:id="subtitle8"><span style="style0">-Some text.<br/>-Some more text</p>

<p begin="601020420t" end="653572920t" xml:id="subtitle9"><span style="style0">-Something else<br/>Some more text</p>

<p begin="654403750t" end="731560830t" xml:id="subtitle10"><span style="style0">More words<br/>-more text</p>

<p begin="732401670t" end="786625840t" xml:id="subtitle11"><span style="style0">Some text.<br/>Some more text</p>
    
por 07.06.2015 / 20:32
1

Se todas as suas linhas forem como você mostra, tudo o que você precisa fazer é inserir a nova string após o primeiro > em cada linha:

$ sed 's/>/><span style="style0">/' file 
<p begin="540960420t" end="600189590t" xml:id="subtitle8"><span style="style0">-Some text.<br/>-Some more text</p>

<p begin="601020420t" end="653572920t" xml:id="subtitle9"><span style="style0">-Something else<br/>Some more text</p>

<p begin="654403750t" end="731560830t" xml:id="subtitle10"><span style="style0">More words<br/>-more text</p>

<p begin="732401670t" end="786625840t" xml:id="subtitle11"><span style="style0">Some text.<br/>Some more text</p>
    
por 07.06.2015 / 21:05