我想搜索一个字符串并拉出两个模式之间的所有线条

我想搜索一个字符串并拉出两个模式之间的所有线条

我想搜索一个字符串并拉出两个模式(包括模式)之间的所有线条。

开始#1

姓名 S

101

法兰克福_1_1

19 号

A+

街道


结尾


开始#2

姓名B

104

柏林

20

A+

街道


结尾



开始#100

姓名C

107

柏林

21

A+

街道

结尾



开始#24

姓名 D

110

法兰克福_1_1

21

A+



结尾

如果我是grep法兰克福

然后它必须显示 START 和 END 之间的所有行(包括 START 和 END),例如:

开始#1

姓名 S

101

法兰克福_1_1

19 号

A+

街道


结尾


开始#24

姓名 D

110

法兰克福_1_1

21

A+

街道


结尾

我使用的命令:

猫文件| awk '/START/,/END/' | '/START/,/END/' | grep -p 法兰克福

但这没有用。

答案1

不确定 awk 是该工作的正确工具,因为您的搜索是基于多行的。我认为这是 perl 的工作。浏览您可以使用的文件(类似于 awk 语句):

if (/^START/ .. /^END/){}

在那里,您将行存储在一个数组中,如果满足法兰克福,您将打印该行(此处使用布尔值):

push @lines, $_;
if (/Frankfurt/)
        $toPrint = 1;

在所有情况下,当您超出模式时,如果您的布尔值为真,则打印数组,否则不要打印,清空数组。

答案2

我们绝对可以使用awk,试试这个

awk -v RS="END" '$0~/Frankfurt/{print $0 RS}' 文件

相关内容