使用awk或sed打印最后1,2,3..Nth或第一个1,2,3 ...第N个匹配块模式

时间:2015-06-17 04:12:46

标签: bash awk sed

模式1
一个
b
模式2
CD
模式1
重新
模式2
GH
模式1
EF
模式2
QW ë

我可以通过来显示所有匹配的模式 sed -n'/ pattern1 /,/ pattern2 / p'

选择第二个匹配模式或按选择任何第N个 awk -vM = 2'(x + = / pattern1 /)== M&& x + = / pattern2 /'文件
模式1
重新
pattern2

仅打印最后匹配的模式
awk'x + = / pattern1 | pattern2 / {!y ++&& B =“”; B = B?B“\ n”$ 0:$ 0; x == 2&& y = x = 0} END {print B}'档案
模式1
EF
pattern2

但是我如何打印例如最后/第2个或第N个匹配的块模式?
模式1
重新
模式2
模式1
EF
pattern2

1 个答案:

答案 0 :(得分:0)

这可能适合你(GNU sed):

sed -n '/pattern1/,/pattern2/{p;/pattern2/{H;x;s///2;x;T;q}}' file

这将打印pattern1pattern2的前2个匹配项,然后退出。

sed -nr '/pattern1/,/pattern2/H;$!b;x;s/.*((pattern1.*){2})$/\1/p' file

这会打印pattern1pattern2的最后2场比赛。