grep для извлечения подстроки из огромной строки

Я извлекаю определенную информацию с веб-сайта с помощью команды curl . Мне нужно извлечь определенный подраздел строки, используя команду grep. Например, используя команду curl, я получаю HTML-страницу и сохраняю ее в переменной, как показано ниже.

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

Моя извлеченная HTML-страница выглядит следующим образом.

 <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> 

Теперь мне нужно извлечь подраздел всего div с id = "id1" . Я попробовал команду ниже.

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

Это просто дает мне 2 строки, где у меня id = id1. Мне нужно извлечь все содержимое между тегом и тегом.

Если файл был правильным xml, вы можете использовать инструмент разбора xml.

В противном случае, если в этом разделе не было другого (вложенного) раздела div , вы могли бы сделать:

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

Здесь вы можете попробовать что-то вроде:

 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