grep para extrair uma substring de uma cadeia enorme

1

Estou extraindo certas informações de um site usando o comando curl . Eu preciso extrair uma certa subseção da string usando o comando grep. Por exemplo, usando o comando curl eu estou recebendo a página HTML e armazenando em uma variável como abaixo.

page="$(curl http://www.somewebsite.com)"

Minha página HTML extraída é a seguinte.

<html>
<body>
--------
--------
--------
<div class="section" id="id1" style="display:block">
<div class="header">
      <h2>Sub heading here
      </h2>
</div>
<div class="content">
<ol class="class1" id="id1">
<li class="">
<span class="jellybean">
</div>
----------
----------
</html>

Agora, preciso extrair a subseção de todo o div com id="id1" . Eu tentei o comando abaixo.

output="$(curl http:/somesite.com | grep "id="id1")"

Só me pega as 2 linhas onde eu tenho id = id1. Eu preciso extrair todo o conteúdo entre a tag e.

    
por Ramesh 08.02.2014 / 01:44

1 resposta

2

Se o arquivo estivesse correto xml, você poderia usar uma ferramenta de análise xml.

Caso contrário, se não houvesse outra seção (aninhada) div dentro dessa seção, você poderia ter feito:

pcregrep -Mo '(?s)<div[^>]*id="id1".*?</div>' the-file.html

Aqui, você pode tentar algo como:

awk -vRS='<' '
  inside || /^div[^>]*id="id1"/ {
    inside = 1
    if (/^div/)
      n++
    else if (/^\/div>/ && !--n) {
      $0="/div>\n"
      inside=0
    }
    printf "<%s", $0
  }' the-file.html
    
por 08.02.2014 / 12:45