繁体   English   中英

Sed,在两行之间解析,但仅打印有限的几行

[英]Sed, parse out between two lines, but only print a limited lines

我的细节很冗长,但很简单:)我有一个如下文件:

Iteration 1
blah blah
.
.
.
blah blah
pattern 1 
detail 1
detail 2
blah blah
.
.
.
blah blah
Iteration 2
.
.
.
Iteration 10
blah blah
.
.
.
blah blah
pattern 1 
detail 1
detail 2
blah blah
.
.
.
blah blah

(某些迭代没有pattern 1 )。 在此示例中,仅迭代1和迭代10包含该模式。 我感兴趣的模式之后总是有2条细节行(细节1和细节2)。

我需要解析出迭代编号,模式和详细信息(如果特定的迭代包含模式),如下所示:

Iteration 1
pattern 1
detail 1
detail 2
Iteration 10
pattern 1
...

我所做的是:

 sed -n '/Iteration/H;/pattern 1/{N;N;x;G;p}' file

问题:

我的输出是这样的

Iteration 1
pattern 1
detail 1
detail 2
pattern 1
detail 1
detail 2
Iteration 2
Iteration 3

它将我的图案和细节打印两次。 它还打印出所有迭代(我只希望解析出包含模式的迭代数)。

采用

#                  v-- here
sed -n '/Iteration/h;/pattern 1/{N;N;x;G;p}' file

H将当前行附加到保持缓冲区, h用它替换保持缓冲区。 您需要后者,否则您将在随后的匹配块中组装很多碎屑-然后将其打印出来。

如果您的文件没有空行,请使用sed进行预处理,方法是将该文件分解为由空行分隔的记录:

sed '/Iteration/i\
\
' input | awk '/pattern/' RS=

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM