Просто скопируйте эти строки в буфер удержания (затем удалите их) и, когда в последней строке добавьте содержимое буфера удержания в пространство шаблона:
some command | sed '1,NUMBER{ # in this range
H # append line to hold space and
1h # overwrite if it's the 1st line
d # then delete the line
}
$G' # on last line append hold buffer content
С gnu sedего помощью можно написать
some command | sed '1,NUMBER{H;1h;d;};$G'
Вот еще один способ с ol ' ed(он rперенаправляет вывод some commandв текстовый буфер, а затем mвыводит строки 1,NUMBERпосле последней $):
ed -s <<IN
r ! some command
1,NUMBERm$
,p
q
IN
Обратите внимание, что, как указывалось, они оба потерпят неудачу, если на выходе будет меньше NUMBER+1 строки. Более надежный подход ( gnu sedсинтаксис):
some command | sed '1,NUMBER{H;1h;$!d;${g;q;};};$G'
эта строка удаляет только строки в этом диапазоне, если они не являются последней строкой ( $!d), иначе она перезаписывает пространство шаблона с помощью содержимого буфера удержания ( g) и затем qиспользует (после печати текущего пространства шаблона).