awk:匹配模式并在下一个模式之前和之前打印行

awk: match pattern and print lines after and before till next pattern

使用 awk: 找到一个模式。 打印该模式之后的所有行,直到下一个模式。 打印该模式之前的所有行直到下一个模式。

例如。如果这是文件的内容

?hello@
line-0
?type=A;so on
line-1
short-description
line-2
line-3
ending@
line-4
?bye@

匹配模式 short-description 并在直到模式 @ 之后打印行并在直到模式 ? 之前打印行所以输出应该是:

?type=A;so on
line-1
short-description
line-2
line-3
ending@

我试过:awk '/short-description/{copy=1;next} /@/{copy=0;next} 复制'文件

但我不知道如何获取之前的模式部分,我对 awk 的了解非常有限。也请提供一个在线解决方案。

请帮忙。非常感谢。

尝试:

/^\?/ { delete arr ; len = 0 ; hit = 0 }
/^\?/,/@$/ {
    arr[len++] = [=10=]
    if ( /short-description/ )
      hit = 1
}
/@$/ {
    if(hit)
      for(i=0;i<len;++i)
        print arr[i]
}

或者,这一行:

BEGIN { RS="?" } /short-description/ { sub("@.*","") ; print [=11=] }