shell – 如何选择两个标记模式之间的行,可能会出现多次与awk/sed

前端之家收集整理的这篇文章主要介绍了shell – 如何选择两个标记模式之间的行,可能会出现多次与awk/sed前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用awk或sed如何选择在两个不同的标记模式之间发生的行?可以存在用这些模式标记的多个部分。

例如:
假设文件包含:

abc
def1
ghi1
jkl1
mno
abc
def2
ghi2
jkl2
mno
pqr
stu

起始模式为abc,结束模式为mno
所以,我需要输出为:

def1
ghi1
jkl1
def2
ghi2
jkl2

我使用sed匹配模式一次:

sed -e '1,/abc/d' -e '/mno/,$d' <FILE>

有没有任何方式在sed或awk重复做它直到文件结束?

awk总是有帮助:
$ awk '/abc/{flag=1;next}/mno/{flag=0}flag' file
def1
ghi1
jkl1
def2
ghi2
jkl2

说明:

> / abc /匹配具有此文本的行以及/ mno / does。
> / abc / {flag = 1; next}在找到文本abc时设置标志。然后,它跳过线。
> / mno / {flag = 0}在找到文本mno时取消标志。
>最终标志是具有默认操作的模式,即打印$ 0:如果标志等于1,则打印行。

有关更详细的描述和示例,以及显示模式的情况,请参见How to select lines between two patterns?

猜你在找的Bash相关文章