![](/img/trans.png)
[英]Print lines between two patterns through sed/AWK when there is at least one line between them
[英]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.