我正在尝试在两个标签之间的文件中获取文本。但是如果脚本找到了开始标记并且没有找到结束标记,那么它会将文件从开始标记打印到文件的末尾。
例如文字是:
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
答案 0 :(得分:5)
永远不要使用范围表达式,因为它们使得tirivial任务稍微简单,但是当事情变得更加有趣时,需要完全重写以避免重复条件,就像你的情况一样。总是使用标志:
$ awk 'f{ if (/TAG2/){printf "%s", buf; f=0; buf=""} else buf = buf $0 ORS}; /TAG1/{f=1}' file
some right text