Bash. Как получить многострочный текст между тегами

Я пытаюсь получить текст в своем файле между двумя тегами. Но если script находит открывающий тег и не находит закрывающий тег, он печатает файл с открытия тега до конца файла.

Например, текст:

aaa
TAG1
some right text
TAG2
some text2
TAG1
some text3
some text4

и script следующим образом:

awk "/TAG1/,/TAG2/"

или

sed -n "/TAG1/,/TAG2/p"

чем вывод будет:

some right text
some text3
some text4

но мне это нужно:

some right text

Ответ 1

Никогда не используйте выражения диапазонов, так как они делают незначительные задачи, но затем требуют полной перезаписи, чтобы избежать дублирования условий, когда ситуация становится немного интереснее, как в вашем случае. Всегда используйте вместо этого флаг:

$ awk 'f{ if (/TAG2/){printf "%s", buf; f=0; buf=""} else buf = buf $0 ORS}; /TAG1/{f=1}' file
some right text