簡體   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