击。如何在标签之间获取多行文字

时间:2016-08-18 12:39:04

标签: regex linux shell awk sed

我正在尝试在两个标签之间的文件中获取文本。但是如果脚本找到了开始标记并且没有找到结束标记,那么它会将文件从开始标记打印到文件的末尾。

例如文字是:

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 个答案:

答案 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