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