获取两个参数之间的内容,参数在文件中多次出现

Har*_*K L 3 shell awk grep sed sh

使用awk或sed,如何在两个参数之间获取内容,参数在文件中多次出现

例如,文件内容

Entering AAA
12
Entering BBB
13
Leaving AAA
14
Leaving AAA
15
Leaving AAA
16
Leaving BBB
Run Code Online (Sandbox Code Playgroud)

目前我正在使用

cat 1.txt |sed -n '/Entering AAA/,/Leaving AAA/ p'
Run Code Online (Sandbox Code Playgroud)

有了这个,我得到第一次出现"进入AAA"和第一次出现"离开AAA"之间的内容即

Entering AAA
12
Entering BBB
13
Leaving AAA
Run Code Online (Sandbox Code Playgroud)

但是,我想从内容首次出现 "输入AAA"到最后出现 "离开AAA"的

预期产量:

Entering AAA
12
Entering BBB
13
Leaving AAA
14
Leaving AAA
15
Leaving AAA
Run Code Online (Sandbox Code Playgroud)

请帮助.

Ed *_*ton 5

在使用2遍方法的任何awk中:

$ awk 'NR==FNR{if (/Leaving AAA/) end=NR; next} /Entering AAA/{f=1} f; FNR==end{exit}' file file
Entering AAA
12
Entering BBB
13
Leaving AAA
14
Leaving AAA
15
Leaving AAA
Run Code Online (Sandbox Code Playgroud)

或者使用GNU awk一次性完成多字符RS和RT:

$ awk -v RS='Entering AAA.*Leaving AAA' 'RT{print RT}' file
Entering AAA
12
Entering BBB
13
Leaving AAA
14
Leaving AAA
15
Leaving AAA
Run Code Online (Sandbox Code Playgroud)