在 Linux 中打印第一个匹配和第二个匹配之间的行,第二个匹配在第一个匹配之后出现

问题描述 投票:0回答:1

我有一系列数据,我想在一场比赛和下一场不同的比赛后打印数据,例如,在第一场比赛之后,

我有

AAA 
AAAD
BBB 
CCC
AAA
AAADD

想要AAAD和AAA之间的数据。

第一行也有 AAA,但我希望它首先捕获 AAAD,然后打印数据,直到捕获下一个匹配,即第 5 行的 AAA

需要输出:

AAAD
BBB
CCC
AAA

我试过了

perl -lne '打印如果 /AAAD/../AAA/' p

它给了

AAAD
AAADD

它给出精确的匹配并打印它们,而不是在中间给出行。

shell perl awk pattern-matching
1个回答
0
投票

如注释中所述,您需要使用

...
范围运算符来防止在同一行上匹配。像这样:

C:\perl>perl -lnwe "print if /AAAD/../AAA/" a.txt
AAAD
AAADD

C:\perl>perl -lnwe "print if /AAAD/.../AAA/" a.txt
AAAD
BBB
CCC
AAA
AAADD

来自文档:

如果您不希望它在下一次求值之前测试正确的操作数(如 sed 中那样),只需使用三个点(“...”)而不是两个点。在所有其他方面,“...”的行为就像“..”一样。

© www.soinside.com 2019 - 2024. All rights reserved.