This works, but I'm sure there must be a simpler solution:
sed -n '/<table role=\"grid\">/{
x
/^$/b
x
:loop
p
/<\/table>/q
n
b loop
}'
When matching table the line is exchanged (x) with the hold space, and
the old hold contents are compared. They will be empty (/^$/) first time, so
we branch (b) to the end of the script. The next time, the hold will not
be empty (it has the 1st table line). So we undo the exchange (x) and start
a loop where the line is printed (p), until the end of table is matched
when we quit (q). Each time we get the next line (n) and branch back
to the loop label.
It's simpler in awk:
awk '/<table role=\"grid\">/,/<\/table>/ { if(n==1)print }
/<\/table>/ { n++ }'