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

Den*_*Nek 0 regex linux shell awk sed

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

例如文本是:

aaa
TAG1
some right text
TAG2
some text2
TAG1
some text3
some text4
Run Code Online (Sandbox Code Playgroud)

和脚本这样:

awk "/TAG1/,/TAG2/"
Run Code Online (Sandbox Code Playgroud)

要么

sed -n "/TAG1/,/TAG2/p"
Run Code Online (Sandbox Code Playgroud)

比输出将是:

some right text
some text3
some text4
Run Code Online (Sandbox Code Playgroud)

但我需要这个:

some right text
Run Code Online (Sandbox Code Playgroud)

Ed *_*ton 5

永远不要使用范围表达式,因为它们使得tirivial任务稍微简短,但是需要完全重写以避免重复条件,当事情变得更加有趣时,就像你的情况一样.始终使用标志:

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

  • 我将这个很棒的方法添加到我的 [如何在两种模式之间选择线条?](http://stackoverflow.com/a/38972737/1983854)的解决方案中。我希望你不要介意! (2认同)