2016-08-18 73 views
0

我想在两个标签之间的文件中获取文本。但是,如果脚本找到了开始标记并且没有找到结束标记,那么它会从打开标记打印文件到文件结尾。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 
+0

意味着你不想在标签中的文字不关闭。 –

+0

@ShekharKhairnar是 –

回答

3

切勿使用范围表达式,因为他们使tirivial任务稍有简短但随后需要一个完全重写,以避免重复的条件下,当事情变得稍微更有趣,因为你的情况。总是使用一个标志,而不是:

$ awk 'f{ if (/TAG2/){printf "%s", buf; f=0; buf=""} else buf = buf $0 ORS}; /TAG1/{f=1}' file 
some right text 
+1

我在[我如何选择两种模式之间的线?](http://stackoverflow.com/a/38972737/1983854)的解决方案集中添加了这种优秀方法。我希望你不介意! – fedorqui

+1

不,完全没有。 –