使用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} copy'文件
但我不知道如何获得之前的模式部分,我对awk的知识非常有限。另外请提供一个单行解决方案。
请帮忙。非常感谢。
答案 0 :(得分:1)
尝试:
/^\?/ { delete arr ; len = 0 ; hit = 0 }
/^\?/,/@$/ {
arr[len++] = $0
if ( /short-description/ )
hit = 1
}
/@$/ {
if(hit)
for(i=0;i<len;++i)
print arr[i]
}
或者,这个单行:
BEGIN { RS="?" } /short-description/ { sub("@.*","") ; print $0 }