输入文件:
1
2
start pattern
3
4 - 1st block
5
end pattern
6
7
.
.
start pattern
20
21 - nth block
22
end pattern
.
.
start pattern
27
28 - last block
29
end pattern
30
31
我试图提取块以及开始模式和结束模式,我可以在sed表达式下使用
sed '/start_pattern/,/end_pattern/!d' inputfile
输出文件:
start pattern
3
4 - 1st block
5
end pattern
start pattern
20
21 - nth block
22
end pattern
start pattern
27
28 - last block
29
end pattern
但我只想要一个特定的块,在当前情况下最后一个块(仅使用sed)
必需的输出:
start pattern
27
28 - last block
29
end pattern
是否可以获得除第一个或最后一个之外的特定事件,如果是这样的话。
问题与以下问题类似,但要求不同。
How to select lines between two marker patterns which may occur multiple times with awk/sed
答案 0 :(得分:3)
这可能适合你(GNU sed):
sed '/start/,/end/!d;/end/q' file # first occurrence only
sed '/start/h;//!H;$!d;x;s/^\(start.*end[^\n]*\).*/\1/p;d' file # last only
sed '/start/!d;x;s/^/x/;/x\{10\}/!{x;d};x;:a;n;/end/!ba;q' file # 10th only
首先在第一场比赛后退出。
最后一个存储保留空间中最后一个范围匹配,并在文件末尾打印出来。
第n个将计数器存储在保留空间中,当它与所需数字匹配时,打印出下一个范围并退出。