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