我正在尝试通过 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/