=============文件从这里开始=============
模式1:
patterna
patternb
patternf
patternc
patternd
patterne
PATTERN2
模式1:
patterna
patternb
pattern_pat
patternc
patternd
patterne
PATTERN2
模式1:
patterna
patternb
patternf
patternc
patternd
patterne
PATTERN2
模式1:
patterna
patternb
pattern_pat
patternc
patternd
patterne
PATTERN2
模式1:
patterna
patternb
patternf
patternc
patternd
patterne
PATTERN2
=============文件在这里结束=============
现在我要搜索的模式是pattern_pat;我需要打印包含pattern_pat的pattern1和pattern2之间的所有行。喜欢以下
============= OutPut文件=============
模式1:
patterna
patternb
pattern_pat
patternc
patternd
patterne
PATTERN2
模式1:
patterna
patternb
pattern_pat
patternc
patternd
patterne
PATTERN2
我是awk和sed的新手。所以,任何有关这方面的帮助都会很棒
答案 0 :(得分:1)
gawk的
awk -vRS='pattern1:' '/pattern_pat/&&/pattern2/{printf "%s %s",RT,$0}' file
SED
sed -n '/pattern1:/{:a;N;/pattern2/!ba;/pattern_pat/p}' file
答案 1 :(得分:0)
使用awk(可移植,应该可以使用任何POSIX awk):
$ awk ' f{s=s ORS $0}; /pattern1/{s=$0; f=1; g=0}; f && /pattern_pat/{g=1}; f && g && /pattern2/{print s; f=0}' file
pattern1:
patterna
patternb
pattern_pat
patternc
patternd
patterne
pattern2
pattern1:
patterna
patternb
pattern_pat
patternc
patternd
patterne
pattern2
此版本使用两个变量作为标志。当我们在pattern1 ... pattern2组中时,变量f
为真(1
)。如果我们在此组中看到g
,则变量1
为真(pattern_pat
)。每当我们到达pattern2时,如果f
和g
都为真,我们就会打印该组。