我试图通过sed命令在两个模式之间打印行。但我想在结果中包含pattern1 pattern2的行,如果它们之间有一条线。如果pattern1和pattern2之间没有直线,则从文件中排除pattern1和pattern2的直线。

PAT1
XXX
XXX
PAT2
PAT1
XX
PAT2
PAT1
PAT2
PAT1
XXX
PAT2

所需输出为:
PAT1
XXX
XXX
PAT2
PAT1
XX
PAT2
PAT1
XXX
PAT2

最佳答案

sed -n '/PAT1/{b A};b B; :A {N;/PAT2/b}; :B /PAT1/,/PAT2/p'

当看到pat1时,转到分支a。在那里,阅读下一行,如果它包含pat2,则重新开始。否则,打印pat1和pat2之间的行。

关于linux - 当两个图案之间至少有一行时,通过sed/AWK在两个图案之间打印线条,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49034615/

10-12 22:39