linux - 当两个模式之间至少有一行时,通过 sed/AWK 打印两个模式之间的行

标签 linux awk sed

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

相关文章:

c++ - 在两个线程之间传递数据时的时间不一致

node.js - 如何使用 fs 模块获取文件创建日期?

linux - 如何让 Netcat 返回未使用的端口

unix - 在grep中组合-v标志和-A标志

linux - 分割逗号集文件

linux - 在 Linux 上使用 Python 拦截和发送击键

c++ - 加载图形内容的线程

linux - 使用 awk 脚本语言循环遍历多行字符串

linux - 使用awk解析转换如下日志

linux - 基本 Linux bash 命令说明 : awk and others