Como Quebrar um Arquivo com Tags no Bash

3

Eu tenho um arquivo xml chamado test.xml , sem uma tag raiz como esta:

<cat></cat>
<name></name>
<id></id>
<cat></cat>
<name></name>
<id></id>

Como posso envolver esse arquivo com uma tag raiz para que a saída fique assim:

<root>
  <cat></cat>
  <name></name>
  <id></id>
  <cat></cat>
  <name></name>
  <id></id>
</root>
    
por HardCode 14.08.2012 / 08:59

2 respostas

3

Você pode fazer isso com o redirecionamento:

(echo "<root>"; cat test.xml; echo "</root>") > wrapped-test.xml

E com indention:

(echo "<root>"; sed 's/^/  /' test.xml; echo "</root>") > wrapped-test.xml
    
por 14.08.2012 / 09:46
2

Na linha número um, insira antes ( i\ ) a tag de abertura e na última linha ( $ ) acrescente depois ( a\ ) a tag de fechamento (não me importei com a formatação com espaços ):

EDIT : esqueci de dizer que GNU versão de sed é necessária.

Conteúdo de script.sed :

1 i\
<root>
$ a\
</root>

Execute como:

sed -f script.sed infile

Com a seguinte saída:

<root>
<cat></cat>
<name></name>
<id></id>
<cat></cat>
<name></name>
<id></id>
</root>
    
por 14.08.2012 / 09:05