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