Я вот так решил:
1. собираем все в одну строчку, заменяя \r\n на <@@@>
2.разбиваем заново так, чтобы на одной строчке оставался только один парный тег <body></body>
3. делаем необходимые замены
4. собираем снова в одну строчку
5. заменяем <@@@> на \r\n
@echo offset strSrc=a.htmlset strOpenTag=^<body^>set strCloseTag=^</body^>set strEOL=^<@@@^>sed ":a;N;$!ba;s/\n/%strEOL%/g" %strSrc% | ^sed "s:%strOpenTag%:\r\n\0:g" | ^sed "s:%strOpenTag%\(.*\)%strCloseTag%:%strOpenTag%\U\1\E%strCloseTag%:g" | ^sed ":a;N;$!ba;s/\n//g" | ^sed "s:%strEOL%:\r\n:g"
Я так понял, что для sed и awk - это общая практика форматировать текст так для начала, чтобы на одной строке были нужные простые конструкции