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 包含该模式。
在我感兴趣的模式(细节 1 和细节 2)之后总是有 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
它打印出我的图案和细节2次。
它还会打印出所有迭代(我只希望解析出包含模式的迭代次数)。
使用
# v-- here
sed -n '/Iteration/h;/pattern 1/{N;N;x;G;p}' file
H
将当前行附加到保留缓冲区,h
用它替换保留缓冲区。你想要后者,否则你会在后面的匹配块中组装很多垃圾——然后打印出来。
如果您的文件没有空行,请使用 sed 通过将文件分解为由空行分隔的记录来进行预处理:
sed '/Iteration/i\
\
' input | awk '/pattern/' RS=
我的详细信息很长,但很简单:) 我有一个如下文件:
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 包含该模式。
在我感兴趣的模式(细节 1 和细节 2)之后总是有 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
它打印出我的图案和细节2次。 它还会打印出所有迭代(我只希望解析出包含模式的迭代次数)。
使用
# v-- here
sed -n '/Iteration/h;/pattern 1/{N;N;x;G;p}' file
H
将当前行附加到保留缓冲区,h
用它替换保留缓冲区。你想要后者,否则你会在后面的匹配块中组装很多垃圾——然后打印出来。
如果您的文件没有空行,请使用 sed 通过将文件分解为由空行分隔的记录来进行预处理:
sed '/Iteration/i\
\
' input | awk '/pattern/' RS=