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

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

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

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

и скрипт такой:

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
Другие вопросы по тегам