Une approche naïve avec awk:
~$ awk '{a[NR]=$0}END{print a[1];print a[NR];for(i=2;i<NR;i++){print a[i]}}' f
aaaaaa
eeeeee
bbbbbb
cccccc
dddddd
Vous stockez chaque ligne dans le a
tableau, puis imprimez le tableau dans l'ordre souhaité (1ère ligne, dernière ( NR
) et de 2 à l'avant-dernière.
En utilisant une combinaison tête / queue et sed:
~$ head -1 f;tail -1 f;sed '1d;$d' f
aaaaaa
eeeeee
bbbbbb
cccccc
dddddd
Imprimez la première ligne, la dernière et avec sed supprimez la 1ère et la dernière.
Avec sed uniquement, je n'ai pu trouver que cette commande. Je suis sûr qu'il existe de meilleures façons:
~$ sed '${p;x;s/^\n//;p};2,${H;d}' f
aaaaaa
eeeeee
bbbbbb
cccccc
dddddd
S'il s'agit de la première ligne, imprimez-la (par défaut).
À partir de la deuxième ligne, placez-le dans le tampon de maintien ( H
) et supprimez-le de l'espace de motif ( d
). Et si c'est la dernière ligne, imprimez-la ( p
), puis récupérez le tampon de maintien ( x
), supprimez la ligne vide ( s/^\n//
) et imprimez-la ( p
).
awk
solutions, êtes-vous un grandsed
fan ou peut-être avez-vous écritsed
? ;-)