Eu não recomendo analisar qualquer código funcional com ferramentas de processamento de texto. Eles são simplesmente projetados para analisar apenas a linguagem humana e, mais cedo ou mais tarde, você ficará preso ao problema que não pode ser resolvido. Use ferramentas dedicadas (intérprete de html, compilador de c ++, etc.)
Com isso dito, neste caso, você pode tentar pcregrep
:
pcregrep -Mo '<abc>\K(.|\n)*?(?=</abc>)' file
O resultado é
aaaa
bbbb
cccc
dddd
eeee
Sim, há uma nova linha entre bbbb
e cccc
porque no arquivo original temos nova linha. É claro que você pode canalizar a saída para remover espaços em branco se quiser (com tr
, sed
ou qualquer outro), mas como eu disse: nos exemplos da vida real você pode encontrar mais resultados inesperados.