Po prostu skopiuj te linie do bufora wstrzymania (a następnie je usuń), a gdy w ostatnim wierszu dołącz zawartość bufora wstrzymania do przestrzeni wzorów:
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
Ze gnu sed
można napisać go jako
some command | sed '1,NUMBER{H;1h;d;};$G'
Oto inny sposób z ol ' ed
( r
wprowadza wyjście some command
do bufora tekstowego, a następnie m
usuwa wiersze 1,NUMBER
po $
pierwszym):
ed -s <<IN
r ! some command
1,NUMBERm$
,p
q
IN
Zauważ, że - jak wskazano - oba się nie powiedzie, jeśli wyjście ma mniej niż NUMBER
+1 linii. Bardziej solidnym podejściem byłoby ( gnu sed
składnia):
some command | sed '1,NUMBER{H;1h;$!d;${g;q;};};$G'
ten usuwa tylko wiersze z tego zakresu, o ile nie są one ostatnim wierszem ( $!d
) - w przeciwnym razie nadpisuje przestrzeń wzorca zawartością bufora wstrzymania ( g
), a następnie q
usuwa (po wydrukowaniu bieżącej przestrzeni wzorca).