extrai blocos de texto do arquivo xml

1

Eu tenho um arquivo com este conteúdo:

<People>
    <Person>
       <Name>Joe Blogs</Name>
       <Address>55 Oxford St</Address>
       ...lots of other properties
    </Person>
    <Person>
       <Name>Jane Pearson</Name>
       <Address>100 Samson St</Address>
       ...lots of other properties
    </Person>
</People>

As únicas ferramentas que posso usar são: awk, sed, grep, pcre_grep

Eu gostaria de extrair o conteúdo de cada tag "Person", remover a linha "Name" e calcular o md5 do bloco.

Até agora eu tentei:

awk '/<Person>/,/<\/Person>/{print $0}' input.xml | md5sum

No entanto, isso retorna apenas um único md5. Não é um para cada bloco.

    
por Fidel 13.02.2015 / 17:57

2 respostas

3

Experimente o seguinte script awk:

awk '
/<Person>/,/<\/Person>/{
    if (! /<Name>/)
        a=a s $0
    s="\n"
    }
/<\/Person>/{
    system("echo \""a"\" |md5sum - ")
    a=s=""
    }' input.xml

Explicação:

  • Colete todas as linhas entre as tags Person em a variable
  • Quando atender a tag de fechamento /Person chamar o comando do sistema que vazio a variable
por 13.02.2015 / 18:20
1

usando sed da seguinte forma

 sed -n  '/^ *<Person> *$/,/^ *<\/Person> *$/{/<Name>/{d};p}' file|md5sum

segmenta todas as linhas em *<Person> *$/,/^ *<\/Person> * .

/<Name>/ verifique se o intervalo tem a tag "Nome" e exclua essa linha. Depois, imprima os intervalos de linhas e o pipe para md5sum

    
por 14.02.2015 / 21:16