[^<\/div>]*
Это не делает то, что вы думаете, что делает.Это соответствует любой последовательности символов, которые не <
, /
, d
, i
, v
или >
.
. В Perl вы можете просто использовать .*?
, нопоскольку sed не поддерживает несжадные совпадения, вам нужно написать что-то вроде этого:
sed 's#<div class="SectionText">\(\([^<]\|<[^/]\|</[^d]\|</d[^i]\|</di[^v]\|</div[^>]\)*\)</div>#\1#g'
Это говорит о «любой последовательности символов, которая не является <
или <
неза которым следует /
, или за </
не следует d
и т. д.
Излишне говорить, что это нечитаемый, не поддерживаемый и почти не записываемый кусок дерьма, и вы почти наверняка этого не сделаетеиспользовать его, но если вы абсолютно, безусловно, должны использовать регулярные выражения для анализа HTML и, безусловно, должны использовать sed, то здесь вы идете.