Copiez simplement ces lignes dans le tampon de maintien (puis supprimez-les) et lorsque sur la dernière ligne, ajoutez le contenu du tampon de maintien à l'espace de motif:
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
Avec gnu sed
vous pourriez l'écrire comme
some command | sed '1,NUMBER{H;1h;d;};$G'
Voici une autre façon avec ol ' ed
(il r
lit la sortie de some command
dans le tampon de texte puis m
ovule les lignes 1,NUMBER
après la dernière $
):
ed -s <<IN
r ! some command
1,NUMBERm$
,p
q
IN
Notez que - comme indiqué - ces deux échoueront si la sortie a moins de NUMBER
+1 lignes. Une approche plus solide serait ( gnu sed
syntaxe):
some command | sed '1,NUMBER{H;1h;$!d;${g;q;};};$G'
celui-ci ne supprime que les lignes de cette plage tant qu'elles ne sont pas la dernière ligne ( $!d
) - sinon, il écrase l'espace de motif avec le contenu du tampon de maintien ( g
), puis se q
ferme (après avoir imprimé l'espace de motif actuel).