打印包含11行的每个数据块

时间:2015-08-20 00:35:22

标签: linux sed

我有一个文件,文本分为11行或10行(每个块用新行分隔)。我想只提取11行块。是否有任何sed命令允许我指定11个模式(每个行每个模式)并且只有在完全匹配时才打印它们(整个块)?

干杯

2 个答案:

答案 0 :(得分:4)

我知道您要求使用sed,但GNU awk使这项任务变得简单:

select()

awk -F'\n' -v RS= 'NF==11' file 告诉awk使用空行作为记录分隔符。

在awk中,每条记录都分为几个字段。 -v RS=告诉awk使用换行符作为字段分隔符。

-F'\n'告诉awk只有在包含11行的情况下才能打印记录。

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed -nr ':a;N;$G;s/\n+$//;Ta;s/[^\n]+/&/11p' file

使用-n类似grep的选项和-r扩展的regexp选项。

将线条附加到图案空间,直到空行。如果图案空间然后包含11(或更多)行打印它。

N.B。在最后一行可能为空的边缘情况下,添加换行符。

仅限11行:

sed -nr ':a;N;$G;s/\n+$//;Ta;/^([^\n]+\n){10}[^\n]+$/p' file